多线程(6)线程停止
一:线程状态
①新建:Thread t=new Thread();线程对象一旦创建就进入到新生状态。
②就绪:当我们调用start()方法,线程立即进入就绪状态,但不意味立即调度执行。
③运行:运行run()方法(是我们进入就绪状态后,我们cpu调用我们的线程我们就开始执行run方法),进入运行状态,线程才真正执行线程体的代码块。
④阻塞:当调用sleep,wait或同步锁的时候,线程进入到阻塞状态;阻塞解除后,等待cpu调度执行。
⑤死亡:当执行完run()方法后线程就结束了。
二:让线程停止(采用外部标志位)
public class ThreadStop implements Runnable{
private boolean flog=true;
@Override
public void run() {
int i=0;
while (flog){
System.out.println("我是Thread-1:"+i++);
}
}
public void stop(){
this.flog=false;
}
public static void main(String[] args) {
ThreadStop stop=new ThreadStop();
new Thread(stop).start();
for (int i=0;i<1000;i++){
System.out.println("我是main:"+i);
if (i==900){
stop.stop();
}
}
}
}
三:线程休眠(sleep(1000)休眠1秒)
①sleep(时间)指定当前线程阻塞的毫秒数;
②sleep存在异常InterruptedException;
③sleep时间达到后线程进入就绪状态;
④sleep可以模拟网络延时,倒计时等;
⑥每一个对象都有一个锁,sleep不会释放锁;
模拟网络延时性:放大问题的发生性;
//模拟网络延时:放大问题的发生性
public class Wangluo implements Runnable{
private int i=10;
@Override
public void run() {
while (true) {
if (i<=0){
break;
}//模拟延时
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "购买了:" + i--);
}
}
public static void main(String[] args) {
Wangluo wangluo=new Wangluo();
new Thread(wangluo,"zph").start();
new Thread(wangluo,"wlw").start();
new Thread(wangluo,"nyy").start();
}
}
zph购买了:10
wlw购买了:9
nyy购买了:7
zph购买了:8
nyy购买了:5
wlw购买了:6
wlw购买了:2
wlw购买了:1
nyy购买了:3
zph购买了:4
模拟倒计时:
class PPt{
public static void main(String[] args) throws InterruptedException {
demo();
}
public static void demo() throws InterruptedException {
int i=10;
while (true){
Thread.sleep(1000);
System.out.println(i--);
if (i<=0){
break;
}
}
}
}
10
9
8
7
6
5
4
3
2
1
Process finished with exit code 0
浙公网安备 33010602011771号