zoukankan      html  css  js  c++  java
  • 同步锁代码块

    package com.itheima.demo07.Synchronized;
    /*
        卖票案例出现了线程安全问题
        卖出了不存在的票和重复的票

        解决线程安全问题的一种方案:使用同步代码块
        格式:
            synchronized(锁对象){
                可能会出现线程安全问题的代码(访问了共享数据的代码)
            }

        注意:
            1.通过代码块中的锁对象,可以使用任意的对象
            2.但是必须保证多个线程使用的锁对象是同一个
            3.锁对象作用:
                把同步代码块锁住,只让一个线程在同步代码块中执行
     */
    public class RunnableImpl implements Runnable{
        //定义一个多个线程共享的票源
        private  int ticket = 100;

        //创建一个锁对象
        Object obj = new Object();

        //设置线程任务:卖票
        @Override
        public void run() {
            //使用死循环,让卖票操作重复执行
            while(true){
               //同步代码块
                synchronized (obj){
                    //先判断票是否存在
                    if(ticket>0){
                        //提高安全问题出现的概率,让程序睡眠
                        try {
                            Thread.sleep(10);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                        //票存在,卖票 ticket--
                        System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票");
                        ticket--;
                    }
                }
            }
        }
    }

    package com.itheima.demo07.Synchronized;

    /*
        模拟卖票案例
        创建3个线程,同时开启,对共享的票进行出售
     */
    public class Demo01Ticket {
        public static void main(String[] args) {
            //创建Runnable接口的实现类对象
            RunnableImpl run = new RunnableImpl();
            //创建Thread类对象,构造方法中传递Runnable接口的实现类对象
            Thread t0 = new Thread(run);
            Thread t1 = new Thread(run);
            Thread t2 = new Thread(run);
            //调用start方法开启多线程
            t0.start();
            t1.start();
            t2.start();
        }
    }

  • 相关阅读:
    Codeforces 1491 D. Zookeeper and The Infinite Zoo (二进制处理)
    Codeforces 1479A. Searching Local Minimum(注意输入+二分)
    Codeforces 1480B. The Great Hero(阅读模拟题,注意数据范围和攻击顺序)
    Codeforces 1480A. Yet Another String Game (阅读理解题)
    windows 10 开启全盘瞬间索引功能
    JetBrains CLion C++ IDE连接wsl2(Ubuntu)时,报错"Unable to establish SSL connection"解决方案
    WorkFlowy 的 MarkDown 预览方案解决
    git 学习 完全学懂
    jeecgboot <j-popup
    面试之类加载器
  • 原文地址:https://www.cnblogs.com/newcityboy/p/11235140.html
Copyright © 2011-2022 走看看