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

        

            

      

  • 相关阅读:
    生成二维码
    XML 基础应用
    C# 后台模拟请求一般处理程序
    json
    导出excel td格式设置
    发布IIS后 上传文件过大失败解决方案
    SQL Server 日期+4位流水号
    垮库操作
    触发器结合游标删除关联表数据
    我是到今天才懂得“放疗”是居里夫人发明的,你呢?
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8967547.html
Copyright © 2011-2022 走看看