Java多线程——多线程实例
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(); } }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
java多线程同步的五种方法