1.有A、B、C、D四个线程,A线程输出A, B线程输出B, C线程输出C,D线程输出D,要求, 同时启动四个线程, 按顺序输出ABCD;
本题主要通过join方法来实现顺序输出ABCD。
代码如下:
1package thread; 2 3/** 4 * @author Beauxie 5 */ 6public class TestThread1 { 7 8 public static void main(String[] args) { 9 10 // 线程A 11 final Thread a = new Thread(new Runnable() { 12 13 @Override 14 public void run() { 15 System.out.println("A"); 16 17 } 18 }); 19 20 // 线程B 21 final Thread b = new Thread(new Runnable() { 22 @Override 23 public void run() { 24 try { 25 // 执行b线程之前,加入a线程,让a线程执行 26 a.join(); 27 } catch (InterruptedException e) { 28 e.printStackTrace(); 29 } 30 System.out.println("B"); 31 32 } 33 }); 34 35 // 线程C 36 final Thread c = new Thread(new Runnable() { 37 38 @Override 39 public void run() { 40 try { 41 // 执行c线程之前,加入b线程,让b线程执行 42 b.join(); 43 } catch (InterruptedException e) { 44 e.printStackTrace(); 45 } 46 System.out.println("C"); 47 48 } 49 }); 50 51 // 线程D 52 Thread d = new Thread(new Runnable() { 53 54 @Override 55 public void run() { 56 try { 57 // 执行d线程之前,加入c线程,让c线程执行 58 c.join(); 59 } catch (InterruptedException e) { 60 e.printStackTrace(); 61 } 62 System.out.println("D"); 63 } 64 }); 65 66 // 启动四个线程 67 a.start(); 68 b.start(); 69 c.start(); 70 d.start(); 71 72 } 73 74}
运行结果:

2.有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C 要求, 同时启动三个线程, 按顺序输出ABC, 循环10次;
代码如下:
1package thread; 2 3import java.util.concurrent.locks.Lock; 4import java.util.concurrent.locks.ReentrantLock; 5 6/** 7 * @author Beauxie 8 */ 9public class TestThresd2 { 10 11 // //通过JDK5中的锁来保证线程的访问的互斥 12 private static Lock lock = new ReentrantLock(); 13 14 private static int state = 0;// 用state来判断轮到谁执行 15 16 private static final int RUN_NUMBER=100;//表示循环的次数 17 18 //A线程 19 static class ThreadA extends Thread { 20 21 @Override 22 public void run() { 23 for (int i = 0; i < RUN_NUMBER;) { 24 lock.lock();//获取锁定 25 if (state % 3 == 0) { 26 System.out.println("第"+(i+1)+"次:"); 27 System.out.println("A"); 28 state++; 29 i++; 30 } 31 lock.unlock();//释放锁定,不释放锁定,会被该线程一直保持 32 } 33 } 34 } 35 //B线程 36 static class ThreadB extends Thread { 37 38 @Override 39 public void run() { 40 for (int i = 0; i < RUN_NUMBER;) { 41 lock.lock(); 42 if (state % 3 ==1) { 43 System.out.println("B"); 44 state++; 45 i++; 46 } 47 lock.unlock(); 48 } 49 } 50 } 51 //C线程 52 static class ThreadC extends Thread { 53 54 @Override 55 public void run() { 56 for (int i = 0; i < RUN_NUMBER;) { 57 lock.lock(); 58 if (state % 3 == 2) { 59 System.out.println("C"); 60 state++; 61 i++; 62 } 63 lock.unlock(); 64 } 65 } 66 } 67 public static void main (String[] args){ 68 new ThreadA().start(); 69 new ThreadB().start(); 70 new ThreadC().start(); 71 } 72 73}
在这里我将循环次数改成100次,运行结果:

本题参考自:http://love3400wind.blog.163.com/blog/static/796308012013117102941831/
如果各位有更好的思路,麻烦请告诉我,谢谢!