• Java多线程的安全问题


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

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

    */


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

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

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


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

  • 相关阅读:
    sqlserver2005分页
    windows计划任务
    sqlserver 2005 通信格式
    sqlserver 导出数据到excel
    所有连接sqlserver 2005 数据库的驱动程序
    Sql 2000 中行转列的查询方法
    [转] ASP.NET中使用javascript
    [转]17种常用正则表达式
    正则式正反向预编译(实战)
    正则表达式的正反向预编译
  • 原文地址:https://www.cnblogs.com/liangqiyuan/p/5658158.html
Copyright © 2020-2023  润新知