java多线程---使用 Runnable 接口的方式--线程同步:代码块 - Go语言中文社区

java多线程---使用 Runnable 接口的方式--线程同步:代码块


举例:多个窗口共同卖票
任何一个类的对象,都可以充当锁,但多个进程必须共用一把锁
public class Synchronized {
    public static void main(String[] args) {
        Synchronized1 sync = new Synchronized1();

        Thread t1 = new Thread(sync);
        Thread t2 = new Thread(sync);
        Thread t3 = new Thread(sync);

        t1.setName("窗口1");
        t2.setName("窗口2");
        t3.setName("窗口3");

        t1.start();
        t2.start();
        t3.start();
    }
}

class Synchronized1 implements Runnable {
    private int ticket = 100;
    Object obj = new Object();

    @Override
    public void run() {
        while (true) {
            synchronized (obj) {
                if (ticket > 0) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "→票号为:" + ticket);
                    ticket--;
                } else {
                    break;
                }
            }
        }
    }
}

输出结果(100个结果有点长,没有截完整):结果要求①不是只有某个窗口在售票②票号没有重复的③没有负数的票号
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/TheChany/article/details/113407021
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-16 00:13:49
  • 阅读 ( 513 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢