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,因为写起来具有局限性。以上只是一个很简单的例子就可以解决。但是实际开发真正遇到高并发量的情况下,那么问题就来了,你要想着如何去提高效率。以后,我会在微博中慢慢提到。
这是我的第一篇文章,让我微不足道的帮助与您一同成长。
附上代码:
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
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java 三个线程分别打印A B C 50次
- java 线程上机题 循环唤醒 三个线程轮流打印 顺序 A线程->B线程->C线程
- 有三个线程A,B,C 循环10次打印出三个线程的名字ABCABCABCABCABCABCABCABCABCABC
- 三个线程交替打印A、B、C的问题
- Juc开启三个线程打印A,B,C
- Java多线程--三个线程分别打印a,b,c.请用多线程实现循环打印15次abc
- 有三个线程A、B、C(线程名称或id),循环打印10次ABCABB
- 有三个线程A、B、C(线程名称或id),循环打印10次ABCABB…
- 线程1打印A,线程2打印B,线程3打印C,依次打印10遍
- 编写一个线程类(只有一个类),创建三个线程实例:A线程、B线程、C线程;A线程完成打印“A”, B线程完成打印“B”, C线程完成打印“C”;按照ABCABCABC……这样来输出。
- java wait()方法notifyAll()方法实现三个线程打印A,B,C字符
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC
- 有三个线程ID分别是A、B、C,请有多线编程 实现 在屏幕上循环打印10次ABCABC......
- HelloWorld
- mysql中什么数据类型可以存储路径
- 将数字转为中文金额的大写方式(C++版)
- mybatis的foreach
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- string的实现
- java文件上传下载
- 使用JQuery,但不使用JQuery validate 来验证表单非空情况
- 大数据
- mybatis之入门到开发(四)之 Mapper动态代理方式
- 查询Sql Server数据库的作业的信息
- linux下追查线上问题常用命令
- zoj2750(最短路径)