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();
            
        }
    }

        

            

      

  • 相关阅读:
    DataTable转换成List
    gitbash如何修改可恶的蓝色字体
    nvm use exit status 1
    搭建CNPM私有库
    Angular2项目,刷新后页面显示404错误的?
    基于webpack模块加载,ts里对系统对象prototype的扩展
    Angular2 primeNG的p-dropdown的选中值未初始化
    移动端开发常见问题
    weinre的使用
    利用百度地图API进行GPS坐标转换成百度地图坐标,创建点,标签,多边形
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8967547.html
Copyright © 2011-2022 走看看