线程的创建方法

136 阅读2分钟

这是我参与「掘金日新计划 · 6 月更文挑战」的第13天 ,点击查看活动详情

对于并发来说,目前就是处于多个线程共同抢占同一个资源来展开的,

   

线程:  进程中单个可操作的最小逻辑单位, 

面试题: 创建线程的方法:

创建线程的方法,

  • 继承Thread类
  • 实现Runnable接口
  • 实现callable接口
  • 线程池

1.创建线程

 匿名内部类,加上lambda表达式

 

 new Thread(new Runnable() {

            public void run() {

                System.out.println("haha");



            }



        }).start();

我们使用实现接口Runnable的方式,因为组合中组合优于继承(Prefer composition over inheritance)

降低耦合,java是单继承

Runnable中的run()方法并不是你所创建的线程调用的,而是调用你这个线程的线程调用的,也就是主线程

其中 启动线程的是start(),

测试:

用两种不同的方式,创建出两个线程,交差打印1~100之间的奇数和偶数,并断点调试。

            public void run() {
                int jishu = 0;
                int oushu = 0;
                for (int i = 1; i < 100; i++) {
                    if (i % 2 == 0){
                       oushu++;
                    }else jishu++;
                }
                System.out.println("奇数有"+jishu);
                System.out.println("偶数有"+oushu);
            }
        }).start();

常用于线程的使用于,多个请求处理抢占资源,当多个人去抢夺同一件资源之后 这个里面的资源的把控和对于外界告诉当前的资源所剩比例,或者说是当前是否可以进去直接抢占 就和我们之前提到的锁相关,以及数据可见性有关

这几个创建的方法其实都可以,但是我们常用的还是线程池的使用 利用池化的思想,可以减少对于链接的损耗,提高管控的能力,积极的可以对所需要的资源进行整理

当前我们侧重点是支持线程池数据中的基本参数,

  • corePoolSize:核心线程数

  • maximumPoolSize:最大线程数

  • unit:时间单位

  • workQueue:工作队列

  • 线程最大存货时间等

类似于银行机制,柜台取钱的操作,如果可以就进行数据处理,如果不行 将可以对数据直接进行放到工作队列里面等