• Java多线程同步代码块


    /*多线程的安全问题
    1.为什么会出现安全问题?
    因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码
    后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候,线程运行的条件不满足了
    这时候,就出现了安全问题

    2.实现接口线程的方法不能抛出异常!

    */


    /*运行情况
    通过分析,发现,打印出0,-1,-2等错票。

    多线程的运行出现了安全问题

    问题的原因?
      当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完
      另一个线程参与进来,导致共享数据错误
     
    解决办法
      对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其它线程不参与执行。
     
    Java对于多线程的安全问题提供了专业的解决方式
    就是同步代码块
    格式:
        synchronized(对象)  对象可以随意(使用上帝就行)
        {
            需要被同步的代码(哪些代码在操作共享数据)
        }
        
    对象如同锁,持有锁的线程可以在同步中执行
    没有持有锁的线程即便获取cpu的执行权,也进不去,因为没有获取权

    同步的前提:
    1.必须要有两个或者两个以上
    2.必须是多个线程使用同一个锁

    必须保证同步中只能有一个线程在运行

    好处:解决了多线程的安全问题

    弊端:多个线程需要判断锁,较为消耗资源
    */


    class Ticket implements Runnable //extends Thread
    {
        object obj=new object();
        private static int tick=100;
        public void run()              /*不能在这写同步函数,否则其它线程用不了,需要单独写一个同步函数*/
        {
            while(true)
            {   synchronized(obj)
                {
                    if(tick>0)
                    {
                        try
                        {
                            Thread.sleep(10);   /*每次运行就沉睡一下*/
                        }
                        catch(Exception e)
                        {
                            
                        }
                        System.out.println(Thread.currentThread().getName()+"sale:--"+tick--);
                    }
                }
              }
        }
    }

    class TicketDemo
    {
        public static void main(String args[])
        {
            Ticket t=new Ticket();
            Thread t1=new Thread(t);
            Thread t2=new Thread(t);
            Thread t3=new Thread(t);
            Thread t4=new Thread(t);
            
            t1.start();
            t2.start();
            t3.start();           
            t4.start();
        }
    }

  • 相关阅读:
    【力扣 044】62. 不同路径
    【力扣 040】1143. 最长公共子序列
    【力扣 039】347. 前K个高频元素
    【力扣 047】63. 不同路径 II
    【力扣 038】20. 有效的括号
    【力扣 043】897. 递增顺序查找树
    SAP MM不常用移动类型之325
    SAP RETAIL 初阶之使用事务代码WRFMATCOPY创建商品主数据
    SAP RETAIL初阶之商品主数据门店视图里没有WM数据
    SAP RETAIL初阶之商品主数据WM视图
  • 原文地址:https://www.cnblogs.com/liangqiyuan/p/5660284.html
Copyright © 2020-2023  润新知