三个线程,ABC 10次(volatile+synchronized)
package ThreadABC;
public class Share {
private volatile int status;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public Share(int status) {
this.status = status;
}
}
package ThreadABC;
public class A implements Runnable {
private int num =0;
private Share lock;
@Override
public void run() {
for(;num < 10;){
if(lock.getStatus()%3==1) {
System.out.print("A");
synchronized(lock) {
lock.setStatus(lock.getStatus()+1);
}
num++;
}
}
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public A(Share lock) {
this.lock = lock;
}
}
package ThreadABC;
public class B implements Runnable {
private int num =0;
private Share lock;
@Override
public void run() {
for(;num < 10;){
if(lock.getStatus()%3==2) {
System.out.print("B");
synchronized(lock) {
lock.setStatus(lock.getStatus()+1);
}
num++;
}
}
}
public B(Share lock) {
this.lock = lock;
}
}
package ThreadABC;
public class C implements Runnable {
private int num =0;
private Share lock;
@Override
public void run() {
for(;num < 10;){
if(lock.getStatus()%3==0) {
System.out.println("C");
synchronized(lock) {
lock.setStatus(lock.getStatus()+1);
}
num++;
}
}
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public C(Share lock) {
this.lock = lock;
}
}
package ThreadABC;
public class Test {
public static void main(String[] args){
Share o = new Share(1);
A a = new A(o);
B b = new B(o);
C c = new C(o);
Thread a1 = new Thread(a);
Thread b1 = new Thread(b);
Thread c1 = new Thread(c);
a1.start();
b1.start();
c1.start();
}
}
三个线程,ABC 10次(volatile+synchronized)的更多相关文章
- 三个线程abc顺序执行
1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o) public class ThreadThreadp { private int fl ...
- 三个线程ABC,交替打印ABC
转载与:https://www.cnblogs.com/x_wukong/p/4009709.html 创建3个线程,让其交替打印ABC . 输出如下: ABCABCABCABC. 方法:使用syn ...
- java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现
注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...
- 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
简要分析: 要求三个线程轮流输出,这里我们要使用一个对象锁,让关键部分的代码放入同步块当中.同时要有一个变量记录打印的次数到达10次循环后不再打印,另外一个就是要给每个线程一个标志号,我们根据标识号来 ...
- Java多线程:用三个线程控制循环输出10次ABC
转载:http://www.cnblogs.com/gaopeng527/p/5257884.html 题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个 ...
- 如何使用 volatile, synchronized, final 进行线程间通信
原文地址:https://segmentfault.com/a/1190000004487149.感谢作者的无私分享. 你是否真正理解并会用volatile, synchronized, final进 ...
- 多线程学习三:Thread API,ThreadLocal,synchronized,volatile和Condition
一.Thread API: setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 首先要了解什么是Thread. ...
- Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍
题目:子线程执行10次后,主线程再运行5次,这样交替执行三遍 代码如下: package com.itheima.gan; /** * 子线程执行10次后,主线程再运行5次,这样交替执行三遍 * @a ...
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...
- java Semaphore实现ABC三个线程循环打印
Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...
随机推荐
- 12_jvm性能优化专题1——top命令和jstack联合定位
一:异常项目构建 1.通过while死循环构造异常常见: package com.huawei.jvm; import org.springframework.stereotype.Controlle ...
- 机器视觉:MobileNet 和 ShuffleNet
虽然很多CNN模型在图像识别领域取得了巨大的成功,但是一个越来越突出的问题就是模型的复杂度太高,无法在手机端使用,为了能在手机端将CNN模型跑起来,并且能取得不错的效果,有很多研究人员做了很多有意义的 ...
- IOS 生成静态库文件(.framework)
http://blog.csdn.net/zwl492454828/article/details/55095422
- VirtualBox 使用物理硬盘
/******************************************************************************* * VirtualBox 使用物理硬盘 ...
- docker3
Docker容器的设置资源(cpu,内存)限制: #docker run –memory=200M xxxx-image --vm 1 –verbose #docker run --cpu-s ...
- Feign源码解析系列-注册套路
感谢不知名朋友的打赏,感谢你的支持! 开始 在追寻Feign源码的过程中发现了一些套路,既然是套路,就可以举一反三,所以值得关注. 这篇会详细解析Feign Client配置和初始化的方式,这些方式大 ...
- PTA L2-4 关于堆的判断
先上题面 链接 https://pintia.cn/problem-sets/994805046380707840/problems/994805064676261888 首先,题目描述的很清楚,这是 ...
- 学习笔记DL005:线性相关、生成子空间,范数,特殊类型矩阵、向量
线性相关.生成子空间. 逆矩阵A⁽-1⁾存在,Ax=b 每个向量b恰好存在一个解.方程组,向量b某些值,可能不存在解,或者存在无限多个解.x.y是方程组的解,z=αx+(1-α),α取任意实数. A列 ...
- 家人的健康和offer的取舍
记得2月份去Amazon面试的时候,小孩子正莫名的发烧,已经破纪录的连续烧了4天,到了6点面试完毕,面试官还试探性的问我还有没有什么要聊的,当时确实是没了心情,就想着回家看小病人,在回家的路上,暗暗的 ...
- Ubuntu 16.10的root默认密码设置
1.终端输入sudo passwd 2.输入当前用户密码,回车 3.按照终端提示输入新的root密码并确认 4.su root 输入新的密码 5.修改root密码成功