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哪一个更好
3.3、线程池创建的几种方法
3.4、几个并发Demo实现
3.5、SpringBoot真实项目如何使用线程
4、课后习题
4.1、创建线程的几种方式?分别使用这几种方式进行代码编写?
可以参考本文的【3.1章节】
4.2、让当前线程休眠的两种方法?
可以参考本文的【3.1章节】
4.3、Runable为什么没有getName()方法?
Runable只是Thread的执行逻辑,线程名称都是Thread才有的内容,所以没有办法设置name
4.4、Thread和Runable哪一个更好?
5、参考网址
- 线程创建的3种方式:https://www.jianshu.com/p/79293c654991
网友评论