希望可以帮到你复制代码
- package com.xbox;
- class StopThread implements Runnable{
- private boolean flag = true;
- public synchronized void run(){
- while(flag){
- System.out.println("while中的flag为"+flag);
- try{
- System.out.println(Thread.currentThread().getName());
- wait();
- }
- catch (InterruptedException e){
- System.out.println(Thread.currentThread().getName()+"...Exception");
- }finally{
- System.out.println("最后的"+flag);
- //判断这时候的finally中的flag为false了,可是两个线程早已经执行完事了
- //因为是两个线程,所以打印两次
- }
- }
- }
- public void changeFlag(){
- flag = false;
- }
- }
- class Test{
- public static void main(String[] args) {
- StopThread st = new StopThread();
- Thread t1 = new Thread(st);
- Thread t2 = new Thread(st);
- t1.start();//开启线程
- t2.start();
- int num = 0;
- while(true){
- if(num++ == 60){
- st.changeFlag();
- t1.interrupt();//中断线程
- t2.interrupt();
- break;
- }
- System.out.println(Thread.currentThread().getName()+"......"+num);
- }
- }
- }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |