美文网首页
003--【 并发】多线程使用方法

003--【 并发】多线程使用方法

作者: 糖纸疯了 | 来源:发表于2020-07-20 00:59 被阅读0次

1、写在前面

在此记录,以备遗忘


2、核心要点

2.1、线程的几种创建方式

2.2、Thread和Runable哪一个更好

2.3、线程池创建的几种方法

2.4、几个并发Demo实现

2.6、SpringBoot真实项目如何使用线程


3、具体操作

3.1、线程的几种创建方式【打破这种方式】

线程创建的3种方式:https://www.jianshu.com/p/79293c654991
1)使用Thread

MyThread myThread = new MyThread();
myTread.start();

2)使用Runable

Thread thread = new Thread(new MyRunnable());
thread.start();

3)使用Furure【异步】

//1.创建Callable的对象返回值
Callable<Integer> callable = new Callable<Integer>() {
    public Integer call() throws Exception {
        return new Random().nextInt(100);
    }
};
//2.FutureTask实现了两个接口,Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值
FutureTask<Integer> future = new FutureTask<Integer>(callable);
//3.作为Runnable被线程执行
new Thread(future).start();

4)使用Thread直接执行一个任务【NEW】

1)我认为这个也是一种线程实现方式,只不过在博客中很少看到
2)前面的3中,无论是Thread/Runable/Future都是线程相关的类,当前方法直接把一个方法用线程去执行
3)扩展了【线程休眠的方法】【核心依然是Thread.sleep(2)】,但是更推荐使用【TimeUnit.SECONDS.sleep(4)】

public class Test03Main {

    // 静态方法,或者普通方法,和线程一点关系没有
    public synchronized static void accesResource(){
        try {
            // 1、直接使用线程进行休眠
            // Thread.sleep(3);
            // 2、使用时间工具类进行休眠
            TimeUnit.SECONDS.sleep(4);//2秒钟
            System.out.println(Thread.currentThread().getName()+"----is running");
            // TimeUnit.MINUTES.sleep(3);//2分钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // 直接创建线程去执行该方法
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new Thread(Test03Main::accesResource).start();
        }
    }
}

3.2、Thread和Runable哪一个更好

详细分析博客:https://www.jianshu.com/p/f602ba132ce6

3.3、线程池创建的几种方法

详细分析博客:https://www.jianshu.com/p/f602ba132ce6

3.4、几个并发Demo实现

详细分析博客:https://www.jianshu.com/p/e5e4932d7c70

3.5、SpringBoot真实项目如何使用线程

详细分析博客:https://www.jianshu.com/p/f602ba132ce6


4、课后习题

4.1、创建线程的几种方式?分别使用这几种方式进行代码编写?

可以参考本文的【3.1章节】

4.2、让当前线程休眠的两种方法?

可以参考本文的【3.1章节】

4.3、Runable为什么没有getName()方法?

Runable只是Thread的执行逻辑,线程名称都是Thread才有的内容,所以没有办法设置name

4.4、Thread和Runable哪一个更好?

详细分析博客:https://www.jianshu.com/p/f602ba132ce6


5、参考网址

相关文章

网友评论

      本文标题:003--【 并发】多线程使用方法

      本文链接:https://www.haomeiwen.com/subject/jnwdkktx.html