zoukankan      html  css  js  c++  java
  • 线程安全问题


    当多个线程共同使用同一数据时候,可能会导致数据错乱,容易发生线程安全问题;


    解决方案:使用同步代码块把需要一起运行的代码包裹起来,以达到数据安全的目的.

    public class Demo_Synchronized {
    
            /**
             * @param args
             * 需求:铁路售票,一共100张,通过四个窗口卖完.
             */
            public static void main(String[] args) {
                TicketsSeller t1 = new TicketsSeller();
                TicketsSeller t2 = new TicketsSeller();
                TicketsSeller t3 = new TicketsSeller();
                TicketsSeller t4 = new TicketsSeller();
    
                t1.setName("窗口1");
                t2.setName("窗口2");
                t3.setName("窗口3");
                t4.setName("窗口4");
                t1.start();
                t2.start();
                t3.start();
                t4.start();
            }
    
        }
    
        class TicketsSeller extends Thread {
            private static int tickets = 100;
            static Object obj = new Object();
            public TicketsSeller() {
                super();
    
            }
            public TicketsSeller(String name) {
                super(name);
            }
            public void run() {
                while(true) {
                    synchronized(obj) {
                        if(tickets <= 0) 
                            break;
                        try {
                            Thread.sleep(10);//线程1睡,线程2睡,线程3睡,线程4睡
                        } catch (InterruptedException e) {
    
                            e.printStackTrace();
                        }
                        System.out.println(getName() + "...这是第" + tickets-- + "号票");
                    }
                }
            }
        }
    

    • Vector是线程安全的,ArrayList是线程不安全的
    • StringBuffer是线程安全的,StringBuilder是线程不安全的
    • Hashtable是线程安全的,HashMap是线程不安全的
  • 相关阅读:
    文件管理系统(JQuery插件+Ajax)
    十大Ajax框架
    WSS3.0开发你还在为写CAML痛苦吗?
    vue获取微博授权的URL
    微博三方登录原理
    阿里云短信服务
    JWT原理和COOKIE原理
    django数据库的ORM操作
    celery原理与组件
    生成微博授权URL
  • 原文地址:https://www.cnblogs.com/loaderman/p/6411184.html
Copyright © 2011-2022 走看看