package thread;
public class ArmyRunnable implements Runnable {
//volatile保证了线程可以正确的读取其他线程写入的值
//保证可见性,ref JMM,happens-before原则
//修饰被不同线程访问和修改的变量
volatile boolean keepRunning = true;
@Override
public void run() {
while(keepRunning){
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"["+i+"]");
//让出了处理器时间,下一次进程的执行是随机的
Thread.yield();
}
}
System.out.println("结束!");
}
}
package thread;
public class KeyPersonThread extends Thread {
public void run(){
System.out.println(Thread.currentThread().getName()+"开始了!");
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName());
}
System.out.println(Thread.currentThread().getName()+"结束了!");
}
}
package thread;
/**
* 隋唐演义大戏舞台
*/
public class Stage extends Thread {
public void run() {
ArmyRunnable armyTaskOfSuiDynasty = new ArmyRunnable();
ArmyRunnable armyTaskOfRevolt = new ArmyRunnable();
// 使用Runnable接口创建线程
Thread armyOfSuiDynasty = new Thread(armyTaskOfSuiDynasty, "小明");
Thread armyOfRevolt = new Thread(armyTaskOfRevolt, "小红");
// 启动线程,让军队开始作战
armyOfSuiDynasty.start();
armyOfRevolt.start();
// 线程休眠
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
armyOfRevolt.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("来了");
Thread mrCheng = new KeyPersonThread();
mrCheng.setName("小黑");
System.out.println("xxx");
//停止线程的方法
armyTaskOfSuiDynasty.keepRunning = false;
armyTaskOfRevolt.keepRunning = false;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mrCheng.start();
try {
mrCheng.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("结束");
}
public static void main(String[] args) {
new Stage().start();
}
}