1.两个线程的交替执行
package myThread; public class alternateThread { Object o=new Object(); Boolean f=true; class Thread1 extends Thread{ @Override public void run() { synchronized (o){ for(int i=0;i<20;i++){ System.out.println("线程1执行第"+i+"次!"); o.notify(); if(f){ f=false; try { o.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } class Thread2 extends Thread{ @Override public void run() { synchronized (o){ for(int i=0;i<20;i++){ System.out.println("线程2执行第"+i+"次!"); o.notify(); if(!f){ f=true; try { o.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } public void start(){ new Thread1().start(); new Thread2().start(); } public static void main(String[] args) { alternateThread alternateThread=new alternateThread(); alternateThread.start(); } }
|
2.三个线程的交替执行
package myThread; public class alternateThread2 { //定义控制变量 static int count = 0; //定义对象琐 static final Object obj = new Object(); Thread t1 = new Thread(new Runnable() { @Override public void run() { int i=10; while (i>0) { synchronized (obj) { if (count % 3 == 0) { System.out.println("A"+i); count++; obj.notifyAll(); i--; } else try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { int i=10; while (i>0) { synchronized (obj) { if (count % 3 == 1) { System.out.println("B"+i); count++; obj.notifyAll(); i--; } else try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }); Thread t3 = new Thread(new Runnable() { @Override public void run() { int i=10; while (i>0) { synchronized (obj) { if (count % 3 == 2) { System.out.println("C"+i); count++; obj.notifyAll(); i--; } else try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }); public void fun() { t1.start(); t2.start(); t3.start(); } public static void main(String[] args) { alternateThread2 tp = new alternateThread2(); tp.fun(); } } |
3.多个线程qian谦让执行
package myThread; public class Joinpractice { static class myjoin implements Runnable{ private Thread beforeThread; int count=10; public myjoin(Thread beforeThread){ this.beforeThread=beforeThread; } @Override public void run() { if(this.beforeThread!=null){ try { beforeThread.join(); System.out.println("start thread:"+Thread.currentThread().getName()); while(count>0){ System.out.println("卖出第"+count--+"张票"); } } catch (InterruptedException e) { e.printStackTrace(); } }else { System.out.println("start thread:"+Thread.currentThread().getName()); while(count>0){ System.out.println("卖出第"+count--+"张票"); } } } } public static void main(String[] args) { Thread thread1=new Thread(new myjoin(null)); Thread thread2=new Thread(new myjoin(thread1)); Thread thread3=new Thread(new myjoin(thread2)); thread1.start(); thread2.start(); thread3.start(); } } |