java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去

来源:互联网 发布:dota2天梯各分段 知乎 编辑:程序博客网 时间:2024/04/29 18:22
最近看到有人提问这个问题,而且好多人又是转载的,写了一大堆,看的我头都大了。于是自己做了个小程序轻松解决。
附上代码:
package pcitc;




import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;




public class MyThread implements Runnable{

final Lock locks = new ReentrantLock();

private String name;

public MyThread(String name) {
super();
this.name = name;
}




@Override
public void run() {
try {
locks.lock();
for (int i = 0; i < 5; i++) {
System.out.println("线程" + name);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
locks.unlock();
}
}




public static void main(String[] args) {
try {
MyThread A = new MyThread("A");
MyThread B = new MyThread("B");
MyThread C = new MyThread("C");
Thread threadA = new Thread(A);
Thread threadB = new Thread(B);
Thread threadC = new Thread(C);
threadA.start();
threadA.sleep(3);
threadB.start();
threadB.sleep(3);
threadC.start();
threadC.sleep(3);
} catch (Exception e) {
e.printStackTrace();
}
}

}


注:如果你尝试打断点进行跟踪,那么,很遗憾,你会获取不到相应的结果。必须直接运行。
其实这就是个给线程加锁的过程。很多人,想必都听说过synchronized关键字,这里所用到的是java.util.concurrent.locks包下的ReenTrantLock类,顾名词义,就是个锁,不同的是,它的锁可以手动控制。个人不喜欢synchronized,因为写起来具有局限性。以上只是一个很简单的例子就可以解决。但是实际开发真正遇到高并发量的情况下,那么问题就来了,你要想着如何去提高效率。以后,我会在微博中慢慢提到。
这是我的第一篇文章,让我微不足道的帮助与您一同成长。
阅读全文
1 0