文章目录
前言
本片介绍java中多线程生命周期,及几种实现方式。
一、什么是多线程?
- 进程 : 是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元;
- 线程: 就是进程中的一个独立控制单元,线程在控制着进程的执行。一个进程中至少有一个进程。
- 多线程: 一个进程中不只有一个线程。
二、多线程的生命周期
2.1、线程状态
2.2、线程方法
1. stop方法:线程停止,不推荐使用.建议通过时间或者次数或者标记位停止线程
2. sleep方法:休眠(运行状态改为就绪状态),不释放锁。可以模拟网络延时、倒计时等.
3. yield方法:礼让,停止当前正在执行的线程(运行状态改为就绪状态),不一定成功,主要看cpu调度情况
4. join方法:合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞
5.
1. setPriority(1):设置优先级,数字越大,优先级越高,但是执行时不一定按这个优先级来
2. setDaemon(true):设置守护线程(true),默认为用户线程(false)
三、多线程的实现方式
3.1、继承Thread类
public class ChenThread extends Thread{
@Override
public void run() {
super.run();
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"测试-------");
}
}
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"--开始-------");
ChenThread chenThread=new ChenThread();
chenThread.start();
System.out.println(Thread.currentThread().getName()+"--结束--------");
}
}
3.2 、实现Runable接口
public class ChenRunnable implements Runnable{
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"测试-------");
}
}
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"--开始-------");
ChenRunnable chenRunnable=new ChenRunnable();
new Thread(chenRunnable).start();
System.out.println(Thread.currentThread().getName()+"--结束--------");
}
}
3.3、 实现Callable接口
public class TestCallable implements Callable<Boolean> {
@Override
public Boolean call(){
System.out.println(Thread.currentThread().getName()+"测试.");
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestCallable t1=new TestCallable();
TestCallable t2=new TestCallable();
ExecutorService service= Executors.newFixedThreadPool(2);
Future<Boolean> r1=service.submit(t1);
Future<Boolean> r2=service.submit(t2);
System.out.println("r1运行结果"+r1.get());
System.out.println("r2运行结果"+r2.get());
//关闭服务
service.shutdown();
}
}
四、线程同步机制
4.1、synchronized
4.2、lock
五、线程池
public class Test5 {
public static void main(String[] args) {
ExecutorService service= Executors.newFixedThreadPool(10);
service.execute(new Chen());
service.execute(new Chen());
service.execute(new Chen());
service.execute(new Chen());
service.shutdown();
}
}
class Chen implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}