一、 线程
a) 概念:CPU调度的时间单位
b) 进程:一个运行中的应用程序
c) 理解:多任务(进程/线程)系统,因为一个进程中至少有一条线程
d) 如何创建一条线程
-
继承线程父类:Thread : 必须重写父类Thread的run方法
public class ThreadTest extends Thread{@Override
public void run() {
int count = 0;
while(true){
if(count++>20){
break;
}
System.out.println(“子线程1…”);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//入口省略
ThreadTest tt = new ThreadTest();
tt.start();
-
实现Runnable接口:Runnable : 必须重写父类Thread的run方法
public class RunnableTest implements Runnable{@Override
public void run() {
int count = 0;
while(true){
if(count++>20){
break;
}
System.out.println(“子线程1…”);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//入口省略
RunnableTest rt = new RunnableTest();
Thread t = new Thread(rt);
t.start();
- 实现Callable接口:Callable : 必须重写父类Thread的run方法
e) 线程的态:
- Thread t = new Thread(); 新生态 New Born
- t.start(); 就绪态 ready
- 运行态 运行态 running
- 阻塞态 阻塞态
阻塞的概念:程序暂停
休眠:Thread.sleep(时间:单位毫秒);
import java.util.concurrent.TimeUnit;
TimeUnit.DAYS/HOURS/MINUTES/SECONDS/MILLISECONDS/
MICROSECONDS/NANOSECONDS.sleep(单位长度);
强制等待:线程对象.join(); 线程对象强制运行,其他线程等待
礼让:线程对象.yeild(); 线程对象礼让一个时间单位
等待:线程锁对象.wait(时间:单位毫秒);
通知:线程锁对象notify(); 线程锁对象notifyAll();
其他阻塞方法…. 例如String yes = input.next(); - 死亡态
- 让线程死亡的最安全方法:就是让循环条件不成立,在特定的情况下break;
f) 案例:
- 多人登山 并发,异步
- 多人就诊 并发,阻塞
- 多人抢票 同步(数据:synchronized)
同步方法