Java八股文整理Day3-Java多线程

Java多线程

个人结合所学知识整理,如有错误理解敬请指正,感谢🙏

0.基础知识

程序、进程、线程
  • 程序(program)本质上是为了完成某项特定任务而使用某种语言编写的指令集合
  • 进程(process)是程序的一次执行过程,当程序开始运行,会被加载到内存中,执行时占用cpu资源,执行完毕释放资源(产生-存在-消亡的过程即线程的生命周期);进程可以理解为cpu的资源分配单位,系统在运行时会给每个进程分配不同的内存区域
  • 线程(thread)进程的进一步细化,是程序的执行路径。如果一个进程能够同步执行多个线程,那么这个进程就是支持多线程的;线程可以理解为cpu调度和执行单位,每个线程拥有独立的运行栈和程序计数器,线程切换开销小
并行、并发
  • 并行:多个cpu同时执行多个任务,如多个人做不同的事,但实际上此时一个人只能做一件事
  • 并发:一个cpu同时做多个任务,如一个人同时做多个任务,但实际上同一时间并不是做个任务同时在做,而是采用时间片的技术,分时执行
多线程的优点
  • 提高程序的响应速度,提高用户的使用体验
  • 提高cpu利用率,减少资源闲置
  • 改善程序结构,将复杂的程序细化为多个线程独立运行,有利于理解和修改
多线程的应用场景
  • 程序需要同时执行多个任务
  • 避免程序在执行==需要等待的任务(如用户输入、文件读写操作、网络操作、搜索等)==时阻塞其他任务的运行
  • 需要一些后台执行的程序是也需要用到多线程
Java线程的分类
  • 用户线程:开发者自己编写的线程
  • 后台(守护)线程:用来服务用户线程的线程

1.线程的创建

线程的四种创建方式
  1. 继承Thread类

    //1.创建线程类并继承Thread类,重写run方法
    public class MyThread extends Thread {
         
        @Override
        public void run() {
         
            System.out.println("myThreadRun");
        }
    }
    //测试
    @Test
    void testCreateThreadByExtends(){
         
      //创建线程实例
      MyThread myThread = new MyThread();
      //调用start方法运行线程
      myThread.start();
    }
    //运行结果:myThreadRun
    
  2. 实现Runnable接口(线程无返回值)

    //2.实现Runnable接口,重写run方法
    public class MyThread implements Runnable {
         
        @Override
        public void run() {
         
            System.out.println("myThreadRun");
        }
    }
    //测试
    @Test
    void testCreateThreadByImplements(){
         
      //创建线程实例
      MyThread myThread = new MyThread();
      //实例化Thread类,并传入自己的线程类
      Thread thread = new Thread(myThread);
      //调用start方法运行线程
      thread.start();
    }
    //运行结果:myThreadRun
    
  3. 实现Callable接口(线程有返回值)

    //3.实现Callable接口,泛型为返回值类型,重写call方法
    public class MyCallableThread implements Callable<Integer> {
         
        @Override
        public Integer call() throws Exception {
         
            int sum = 0;
            for (int i = 1; i < 10; i++) {
         
                if(i%2==0){
         
                    sum += i;
                }
            }
            return sum;
        }
    }
    //测试
    @Test
    void testCreateCallableThread(){
         
      //创建自定义线程
      MyCallableThread callableThread = new MyCallableThread();
      //创建FutureTask实例并传入自定义线程
      FutureTask<Integer> futureTask = new FutureTask<>(callableThread);
      //创建线程实例并传入FutureTask实例
      Thread thread = new Thread(futureTask);
      //调用start方法启动线程
      thread.start();
      //获取线程返回的值
      try {
         
        Integer sum = futureTask.get();
        System.out.println("10以内偶数和为:" + sum);
      } catch (InterruptedException e) {
         
        e.printStackTrace();
      } catch (ExecutionException e) {
         
        e.printStackTrace();
      }
    }
    //输出结果:10以内偶数和为:20
    
  4. 通过线程池创建

    //4.创建自定义线程,通过线程池执行线程
    public class MyThread implements Runnable {
         
        @Override
        public void run() {
         
                System.out.println("MyThreadRun");
        }<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值