zoukankan      html  css  js  c++  java
  • 36. 解决线程问题方式一(同步代码块synchronized)

    解决线程问题:

        方式一:同步代码块(synchronized)

            语法:

              synchronized ("锁对象") {
                  //需要锁定的代码
               }

             解决线程安全问题原理:

              当我们使用同步代码块时,就当与给此段语句上了一个锁,当一个线程A进去的时候,锁的状态会从开变成关,后面的线程是进不来的。

              当进去的线程A执行完里面的代码时,锁的状态才会从关变成开,后面的线程才能进来。

            同步代码块需要注意事项:

              1.任何一个对象都可以作为一个锁对象

              2.在同步代码块中调用sleep对象并不是释放锁对象

              3.只有在正真需要使用代码块时才使用,否则会降低效率

              4.多线程操作的所对象必须时唯一共享的。否者无效

              5.锁住的代码最好是操作同一个共享资源的代码

            修改代码如下:

    //模拟3个窗口同时售票
    class SaleTicket extends Thread{
        //定义票数
        static int num = 50;
        public SaleTicket(String name) {
            super(name);
        }
        @Override
        public void run() {
            while (true) {
                if(num>0) {
                    synchronized ("票数") {
                        System.out.println(Thread.currentThread().getName()+"买了"+num+"号票");
                        num--;
                    }
                }else {
                    System.out.println(Thread.currentThread().getName()+"票卖完了");
                    break;
                }
            }
        }
    }
    
    
    public class Demo5 {
        public static void main(String[] args) {
            SaleTicket sale1 = new SaleTicket("窗口1");
            SaleTicket sale2 = new SaleTicket("窗口2");
            SaleTicket sale3 = new SaleTicket("窗口3");
            sale1.start();
            sale2.start();
            sale3.start();
            
        }
    }

        

            

      

  • 相关阅读:
    CentOS6.5安装Tab增强版:bash-completion
    005_linux下logrotate 配置和理解
    ITIL与ITSM的联系与区别
    C++----练习--bool类型作为特别的int要区别对待
    C++----练习--while求和
    C++----练习
    mysql----二进制包安装
    linux----ulimit 限制
    python----特性003
    python----特性002
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8967547.html
Copyright © 2011-2022 走看看