一个产品经理在学习代码,有些问题可能比较初级,各位请多多包涵。我在学习线程有关的内容,首先尝试建立一个线程来循环输出一句话,然后再主线程中设立一个条件尝试利用一个boolean来终结当前正在运行的线程。可是在运行了以后发现主线程一直在输出,知道最后才输出了线程结束。感觉上去就想线程还没有开始就被终结了,但是终结了以后又被启动了一下。按理来说应该“主线程” 和 “Thread” 应该交叉显示才对。请问各位我在这边发生了什么错误呢?
主线程 94
主线程 95
主线程 96
主线程 97
主线程 98
主线程 99
Thread Stopped.
Thread 0public TerminateThread(String name) {
this.name = name;
}
@Override
public void run() {
int i = 0;
// 当Live的值是True的时候,继续线程,false则结束循环。
while (live) {
System.out.println(name + " " + (i++));
}
} public void terminate(){
live = false;
} public static void main(String[] args) {
TerminateThread thread = new TerminateThread("Thread");
new Thread(thread).start(); for (int i = 0; i < 100; i++) {
if (i == 88) {
thread.terminate();
System.out.println("Thread stop");
}
System.out.println("这是主线程");
}
}
主线程 94
主线程 95
主线程 96
主线程 97
主线程 98
主线程 99
Thread Stopped.
Thread 0public TerminateThread(String name) {
this.name = name;
}
@Override
public void run() {
int i = 0;
// 当Live的值是True的时候,继续线程,false则结束循环。
while (live) {
System.out.println(name + " " + (i++));
}
} public void terminate(){
live = false;
} public static void main(String[] args) {
TerminateThread thread = new TerminateThread("Thread");
new Thread(thread).start(); for (int i = 0; i < 100; i++) {
if (i == 88) {
thread.terminate();
System.out.println("Thread stop");
}
System.out.println("这是主线程");
}
}
试试添加volatile
private volatile boolean live=true;
java更建议使用中断来处理这样的问题,
while(!Thread.currentThread().isInterrupted()){
System.out.println(name + " " + (i++));
}
在客户端获取线程引用t,调用t.interupt发出中断。