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)的更多相关文章

  1. 三个线程abc顺序执行

    1.使用synchronized悲观锁(秋招阿里的一个笔试题,应该写的比较复杂,然后就没有然后了o(╥﹏╥)o) public class ThreadThreadp { private int fl ...

  2. 三个线程ABC,交替打印ABC

    转载与:https://www.cnblogs.com/x_wukong/p/4009709.html 创建3个线程,让其交替打印ABC . 输出如下:  ABCABCABCABC. 方法:使用syn ...

  3. java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现

    注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...

  4. 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束

    简要分析: 要求三个线程轮流输出,这里我们要使用一个对象锁,让关键部分的代码放入同步块当中.同时要有一个变量记录打印的次数到达10次循环后不再打印,另外一个就是要给每个线程一个标志号,我们根据标识号来 ...

  5. Java多线程:用三个线程控制循环输出10次ABC

    转载:http://www.cnblogs.com/gaopeng527/p/5257884.html 题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个 ...

  6. 如何使用 volatile, synchronized, final 进行线程间通信

    原文地址:https://segmentfault.com/a/1190000004487149.感谢作者的无私分享. 你是否真正理解并会用volatile, synchronized, final进 ...

  7. 多线程学习三:Thread API,ThreadLocal,synchronized,volatile和Condition

    一.Thread API: setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 首先要了解什么是Thread. ...

  8. Java线程——线程习题(一)子线程执行10次后,主线程再运行5次,这样交替执行三遍

    题目:子线程执行10次后,主线程再运行5次,这样交替执行三遍 代码如下: package com.itheima.gan; /** * 子线程执行10次后,主线程再运行5次,这样交替执行三遍 * @a ...

  9. 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...

  10. java Semaphore实现ABC三个线程循环打印

    Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...

随机推荐

  1. mpvue开发小程序记录

    1.同一组件内嵌套的 v-for 不能连续使用相同的索引,目前为: index,index <li v-for="(list, index) in datas" :key=& ...

  2. 30天代码day4 Class vs. Instance

    Class A blueprint defining the charactaristics and behaviors of an object of that class type. Class ...

  3. 小括号转义 '\\s'

    select split("2405F5 (base 16) Integrated Device Technology (Malaysia) Sdn. Bhd.","\\ ...

  4. springmvc java配置

    配置DispatcherServlet DispatcherServlet的是SpringMVC的核心.在这里请求会第一次接触都框架,它要负责将请求路由到其他的组件之中. 使用Java配置将Dispa ...

  5. Hbase常用操作记录

    Hbase常用操作记录 Hbase 创建表 查看表结构 修改表结构 删除表 创建表 语法:create <table>, {NAME => <family>, VERSI ...

  6. 网络编程一定要看过的socket大山

    python已经可以做很多的东西了.但是要想要和别人互联互通就会涉及到一个关键的模块socket!值得一提的是,其实socket不是python独创的一种模块,而是任何语言都会有的一个部分!自己的程序 ...

  7. 学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、查询索引、导流、word2vec

    影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答.一个问句有很多种回答,可以根据相关程度以及历史聊天记录所有回答排序,找到最优,是一个 ...

  8. 听说https更安全

    0--介绍: 现在人们对网络的依赖越来越重,那么对于网络安全的要求也越来越高,传统的http协议实现了网络中的快速传输,完整传输,保证了信息的完整性,但是对于网络的安全性却没有那么强,很容易被人劫持, ...

  9. 命令行编译多个java文件

    如何使用命令行编译多个java文件 文件结构: method 1 cd javaproject javac -sourcepath javapath -d classpath javapath/*.j ...

  10. 虚拟机安装精简版centos7过程

    虚拟机配置工作如下所示 1.创建虚拟机  使用键盘组合键CTRL+N2.选择自定义(高级) 如图所示: 3.默认如何所示: 4.选择 稍后安装操作系统 如图所示: 5.选择对应的操作系统 如何所示 6 ...