线程练习||启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,

题目描述:

启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后是线程3打印11,12,13,14,15. 接着再由线程1打印16,17,18,19,20….以此类推, 直到打印到75. 

代码实现:

class MyThread extends Thread {
	private String name;
	private String p1;
	private String p2;
	private int count = 0;

	public MyThread(String name, String p1, String p2, int count) {
		this.name = name;
		this.p1 = p1;
		this.p2 = p2;
		this.count = count;
	}

	@Override
	public void run() {
		while (count <= 75) {//总线程结束的条件
			synchronized (p1) {
				synchronized (p2) {
					for (int i = 0; i < 5; i++) {// 循环5次,每个线程打印五个数
						count += 1;
						if (count > 75)
							break;
						System.out.println(name + "---" + count);
					}
					count += 10;
					p2.notify();
				}
				try {
					p1.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

			}

		}

	}

}

public class 线程打印 {
	public static void main(String[] args) throws InterruptedException {
		String a = new String();
		String b = new String();
		String c = new String();
		MyThread aa = new MyThread("线程1", c, a, 0);//线程一进去,把线程三锁住,循环结束跳出
		MyThread bb = new MyThread("线程2", a, b, 5);//线程二进去,把线程一锁住,循环结束跳出
		MyThread cc = new MyThread("线程3", b, c, 10);//线程三进去,把线程二锁住,循环结束跳出
		Thread s1 = new Thread(aa);
		s1.start();
		Thread.sleep(200);
		Thread s2 = new Thread(bb);
		s2.start();
		Thread.sleep(200);
		Thread s3 = new Thread(cc);
		s3.start();
		Thread.sleep(200);
	}
}

输出:

线程1---1
线程1---2
线程1---3
线程1---4
线程1---5
线程2---6
线程2---7
线程2---8
线程2---9
线程2---10
线程3---11
线程3---12
线程3---13
线程3---14
线程3---15
线程1---16
线程1---17
线程1---18
线程1---19
线程1---20
线程2---21
线程2---22
线程2---23
线程2---24
线程2---25
线程3---26
线程3---27
线程3---28
线程3---29
线程3---30
线程1---31
线程1---32
线程1---33
线程1---34
线程1---35
线程2---36
线程2---37
线程2---38
线程2---39
线程2---40
线程3---41
线程3---42
线程3---43
线程3---44
线程3---45
线程1---46
线程1---47
线程1---48
线程1---49
线程1---50
线程2---51
线程2---52
线程2---53
线程2---54
线程2---55
线程3---56
线程3---57
线程3---58
线程3---59
线程3---60
线程1---61
线程1---62
线程1---63
线程1---64
线程1---65
线程2---66
线程2---67
线程2---68
线程2---69
线程2---70
线程3---71
线程3---72
线程3---73
线程3---74
线程3---75

你可能感兴趣的:(趣味算法)