首页 > 其他分享 >多线程之创建线程

多线程之创建线程

时间:2022-12-05 21:56:47浏览次数:38  
标签:Thread 创建 start 线程 多线程 public

多线程

  • 进程
    • 在操作系统中运行的程序就是进程,进程就是执行程序的一次执行过程,它是一个动态的概念式系统资源分配的单位
    • 通常再一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位
  • 线程
    • 线程就是独立的执行路径
    • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,比如主线程,GC线程
    • main()称之为主线程,为系统的入口,用于执行整个程序
    • 在一个进程中,如果开辟了多个线程,线程的运行是由调度器安排调度的,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的
    • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制
    • 线程会带来额外的开销,如CPU调度时间,并发控制开销
    • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致
  • 多线程
    • 多条执行路径,主线程与子线程并行交替执行(普通方法只有主线程一条路径)

线程的创建(重要)

  • ·Thread class 继承Thread类(重点)

    • 自定义线程类,继承Thread类

    • 重写run()方法,编写线程执行体

    • 在主函数中创建一个线程对象,调用start()方法开启线程。

    • package com.fjbc.多线程;
      // 创建线程方式一:继承Thread类,重写run()方法,调用start开启线程
      // 总结:注意,线程开启不一定立即执行,由CPU调度执行
      
      public class TestThread extends Thread {
          @Override
          public void run() {
              //run方法线程方法体
              for (int i = 0; i < 20; i++) {
                  System.out.println("我在看代码----" + i);
              }
          }
      
          public static void main(String[] args) {
      
              //创建一个线程对象
              TestThread testThread = new TestThread();
      
              //start开启线程
              testThread.start();
              
              //主线程
              for (int i = 0; i < 200; i++) {
                  System.out.println("我在学习多线程-----" + i);
              }
          }
      }
      
  • Runnable接口 实现Runnable接口(重点)

    package com.fjbc.多线程;
    
    public class TestThread2 implements Runnable {
        @Override
        public void run() {
            //run方法线程方法体
            for (int i = 0; i < 20; i++) {
                System.out.println("我在看代码----" + i);
            }
        }
    
        public static void main(String[] args) {
    
            //创建一个线程对象
            TestThread2 testThread2 = new TestThread2();
    
            //创建线程对象,通过线程对象来开启线程,代理
    //        Thread thread = new Thread(testThread2);
    //
    //        //start开启线程
    //        thread.start();
            new Thread(testThread2).start();
    
            //主线程
            for (int i = 0; i < 200; i++) {
                System.out.println("我在学习多线程-----" + i);
            }
        }
    }
    
    

    image-20221205194519551

  • Callable接口 实现Callable接口(了解)

    package com.fjbc.多线程;
    
    
    import java.util.concurrent.*;
    
    public class TestCallable2 implements Callable<Boolean> {
        @Override
        public Boolean call() throws Exception {
            System.out.println("创建成功");
            return true;
        }
    
        public static void main(String[] args) {
            TestCallable2 callable = new TestCallable2();
    
            //创建执行服务
            ExecutorService service = Executors.newFixedThreadPool(1);
            //提交执行
            Future<Boolean> result = service.submit(callable);
    
            try {
                boolean isTrue = result.get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            service.shutdownNow();
        }
    }
    
    

标签:Thread,创建,start,线程,多线程,public
From: https://www.cnblogs.com/fjbc/p/16953656.html

相关文章

  • Navicat连接SQL Server后创建表engine语句报错
    Navicat连接SQLServer后创建表engine语句报错在Navicat16中连接了SQLServer,在数据库中用脚本创建表时设置了ENGINE=InnoDBDEFAULTCHARSET=utf8,运行时报错的解决。具......
  • [C++11与并发编程]7、本地变量线程安全
    本地变量线程安全layout:posttitle:本地变量线程安全categories:cpp_concurrencydescription:C++并发编程简介keywords:c++,并发编程,本地变量线程安全​本地变量......
  • 线程池
    Executor框架集图ExecutorServicejuc.ExecutorService继承自Executor接口ThreadPoolExecutor成员变量:ctl://表示两种含义://①:workerCount:worker计数,表示正在......
  • sql创建自动备份数据库
    【背景】  前段时间需要建立一个sql数据库定时自动备份的任务,通过查询以及实践,将自己的经历过程记录在下面。【步骤】一、开启代理,维护计划中建立备份计划二、双......
  • Hello Vue 3.0 + Vite:vite创建项目
    目录​​首先全局安装vite​​​​依次执行下面代码:​​​​创建项目也可以使用指令(yarn):​​​​文件目录结构​​首先全局安装vitenpminstall-gcreate-vite-app依次执行......
  • Gitee创建仓库后关联本地仓库
    全局设置gitconfig--globaluser.name"名字"gitconfig--globaluser.email"邮件"创建git仓库:mkdirworkbenchcdworkbenchgitinittouchREADME.mdgit......
  • SQLServer触发器创建、删除、修改、查看
    一:触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。二:SQ......
  • 第二章:创建你的第一个应用程序(ASP.NET Core in Action)
    本章要点创建第一个ASP.NETCoreweb应用程序运行应用程序了解应用程序的组件 读完第1章后,您应该对ASP.NETCore应用程序的工作原理以及何时使用它们有了大致的了解......
  • Vmware Workstation 16 Pro 创建共享磁盘
    图形界面创建共享磁盘第一台创建共享磁盘首先打开已经安装好系统的虚拟机,点击编辑虚拟机设置,弹出如下窗口:点击添加,选择硬盘,点击下一步:默认选择scsi,点击下一步。选......
  • 手动创建VUE 项目
    一、环境准备1、安装node.js下载地址:https://nodejs.org/en/   2、检查是否安装成功:输出版本号说明安装成功   二、搭建vue环境1、全局安装脚手架vue-......