三个线程,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用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...
随机推荐
- java排序 冒泡?+插入排序
冒泡.public class insortSort { public static void main(String[] args) { int[] arr = {12, 3, 4, 55, 36, ...
- hadoop day 7
1.storm概述 应用于实时的流式计算,结合消息队列和数据库进行使用. Spouts:拓扑的消息源 Bolts:拓扑的处理逻辑单元,每个bolt可以在集群当中多实例的并发执行 tuple:消息元组, ...
- 2PC(Two Phase Commitment Protocol)原理
读TiDB原理部分,知道其分布式事务是参考的Google percolator.而percolator是一种2PC的优化. 分布式事务解决的是什么问题呢? 假设一个场景,一个电商网站,用户在购买商品时 ...
- exp迁移测试库10.2.0.5
目的: 将一套10.2.0.5的UP-UNIX系统的数据,迁移到一台Windows环境下. 迁移方案:由于不同的操作系统,为了方便迁移,只是测试,使用EXP/IMP方式. 迁移流程: 一.源端导出 1 ...
- Tomcat生成的session持久化到MySQL
Telling Tomcat to save session records in MySQL 此部分内容摘自 MySQL cookbook 3th.具体内容不做翻译,哈哈,懒 The default ...
- 【oracle】ORA-02289: sequence does not exist
select * from user_sequences where sequence_name = 'NLDP_LGIR_BASE_SEQUENCE'; 通过该指令查看SEQUENCE是否存在
- Codeforces 1105B:Zuhair and Strings(字符串水题)
time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: sta ...
- 第二次Scrum冲刺——Life in CCSU
第二次Scrum冲刺——Life in CCSU 一. 第二次Scrum任务 继续上一次冲刺的内容,这次完成论坛部分. 二. 用户故事 用户输入账号.密码: 用户点击论坛部分: 系统显示帖子: 用户选 ...
- java第三章笔记
java的基本程序设计结构: 1. 声明一个变量之后,必须用赋值语句对变量进行显示初始化,千万不能使用未被初始化的变量. 2.在java中不区分变量的声明与定义. 3.当参与/运算的两个操作数都是整数 ...
- tornado上帝视角第一次建立WEB服务器
import tornado.ioloop import tornado.web 该视角建立在SOCKET服务端和客户端的基础上. class MainHandler(tornado.web.Requ ...