三个线程,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用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...
随机推荐
- Linux中使用sed命令替换字符串小结
sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的 ...
- ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:847)
/******************************************************************************* * ssl.SSLError: [SS ...
- kettle之linux使用kettle
Kettle可以在Window.Linux.Unix上运行,数据抽取高效稳定,使用之前需要准备环境. 准备java环境,这里就不赘述了,建议jdk7以上版本. 上传kettle压缩包,并解压,我解压的 ...
- Ubuntu 16.04 环境下配置apache2.4 + php5.6
相信用惯了Windows的朋友一开始接触Linux是很崩溃的,因为很多东西都是通过命令行来完成的,包括安装绝大多数的开发工具以及环境,那么在Ubuntu下其实可以直接通过apt-get指令来安装apa ...
- Python Redis中Scan遇到问题
在项目启动中需要删除redis原先相同key储存的值,所以使用scan_iter来便利相关的key,并删除. 这里需要注意两个性能问题 1. scan_iter的模糊匹配的过滤器要正确,否则会带来很多 ...
- python基础(六)
一.内置函数 # input()# type()# len()# print()# enumerate()# list()# dict()# tuple()# set()# str()# int()# ...
- 前端导出功能get和post两种方式
get方式: var url = ’/sjdd/eventQuery/exportSuperviseEventExcel.do?beginDate=' + beginDate + '&endD ...
- The listener supports no services
问题描述 sql> lsnrctl start 提示: The listener supports no services The command completed successfully ...
- 作业一 :关于C语言
C语言是计算机专业的基础课,同时也是计算机专业的第一个入门语言,学好C语言母庸质疑.就目前来看,在C语言中已经学习的内容有:基本运算符及表达式.输入输出函数.选择 结构程序设计.循环结构程序设计.数组 ...
- js相关用法
一.location1.返回当前网址urllocation.href2.设置跳转网址urllocation.href = "http://www.baidu.com"3.重载刷新l ...