zoukankan      html  css  js  c++  java
  • 三个线程,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();
    }
    }


  • 相关阅读:
    【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
    【Win10 应用开发】实现数据的增量加载
    【Win10 应用开发】使用“实时可视化树”工具查看应用界面元素
    将中文字符串分割为数组 解决str_split中文乱码php
    Mac搭建PHP+rabbitMQ环境
    常用笔记:PHP
    常用笔记:MySQL
    常用笔记:Linux
    常用笔记:Web前端
    常用笔记:工具使用
  • 原文地址:https://www.cnblogs.com/mlz-2019/p/9539733.html
Copyright © 2011-2022 走看看