结束线程:采用通知的方式,通常在线程执行体中写一些持续执行的语句,比如说循环,因此,控制住循环,就可以控制住当前的线程
package Thread;
public class HelloThread implements Runnable{
int i=0;
boolean flag=true;
@Override
public void run() {
while (flag){
System.out.println(Thread.currentThread().getName()+":"+i++);
}
}
public void setFlag(){
this.flag=false;
}
}
package Thread;
/*
结束线程:采用通知的方式,通常在线程执行体中写一些持续执行的语句,比如说循环,因此,控制住循环,就可以控制住当前的线程
*/
public class ThreadTest4 {
public static void main(String[] args) {
HelloThread ht=new HelloThread();
Thread t1=new Thread(ht);
t1.start();
for (int i = 0; i < 1000; i++) {
if (i==800){
ht.setFlag();
System.out.println("---------------");
}
}
}
}
Exer:
在main方法中创建并后动两个线程·第一个线程循环随机打印1oo以内的整数﹐直到第二个线程从键盘读取了Q命令·
package Exer;
public class HelloThread4 implements Runnable {
private boolean flag=true;
@Override
public void run() {
while (flag){
int num =(int)Math.random() * 101;
System.out.println(num);
}
}
public void setFlag(){
this.flag=false;
}
}
package Exer;
import java.util.Scanner;
/*
在main方法中创建并后动两个线程·第一个线程循环随机打印1oo以内的整数﹐直到第二个线程从键盘读取了“"Q*命令·
*/
public class ThreadExer2 {
public static void main(String[] args) {
HelloThread4 ht=new HelloThread4();
Thread t1=new Thread(ht);
t1.start();
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()){
String str = scanner.next();
if (str.equalsIgnoreCase("Q")){
ht.setFlag();
System.out.println("----------------");
break;
}
}
}
}