stop方法已经过时。
如何停止线程?
只有一种,run方法结束。
开启多线程运行,运行代码通常是循环结构。
只要控制住循环,就可以让run方法结束,也就是线程结束。
如:
<span style="font-size:24px;">import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class StopThread implements Runnable {
private boolean flag = true;
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
public void run() {
try{
lock.lock();
while(flag){
System.out.println(Thread.currentThread().getName());
}
}finally{
lock.unlock();
}
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
</span>
<span style="font-size:24px;">public class StopMain {
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.setFlag(false);
break;
}
System.out.println(Thread.currentThread().getName()+"..."+num);
}
}
}
</span>
当线程处于了冻结状态,
就不会读取到标记,那么线程就不会结束。
当没有指定的方式让冻结的线程恢复的运用状态时:这是需要对冻结进行清除
<span style="font-size:24px;">import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class StopThread implements Runnable {
private boolean flag = true;
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
public void run() {
try{
lock.lock();
while(flag){
try {
condition.await();
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName()+"...Exeption");
flag = false;
}
System.out.println(Thread.currentThread().getName());
}
}finally{
lock.unlock();
}
}
}
</span>
<span style="font-size:24px;">public class StopMain {
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){
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+"..."+num);
}
}
}
</span>