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

       多线程并发操作同一数据时, 就有可能出现线程安全问题

      使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作

          多次启动一个线程是非法的,特别是当线程已经结束执行后,不能再重新启动    

      * Vector是线程安全的,ArrayList是线程不安全的
      * StringBuffer是线程安全的,StringBuilder是线程不安全的
      * Hashtable是线程安全的,HashMap是线程不安全的

    public class demon3_ticket {
        /*
         * 铁路售票, 100张  4个窗口卖完
         */
        public static void main(String[] args) {
            new Ticket().start();
            new Ticket().start();
            new Ticket().start();
            new Ticket().start();
        }
    
    }
    
    class Ticket extends Thread{
        private static int ticket = 100;
    
        public void run() {
            while(true){
                synchronized (Ticket.class) {
                    if (ticket <= 0) {
                        break;
                    }
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        
                        e.printStackTrace();
                    }
                    System.out.println(this.getName() + "这是第" + ticket -- + "张票");
                }
                
            }
        }
        
    }
    public class demon4_ticket_runnable {
    
        public static void main(String[] args) {
            MyTicket mt1 = new MyTicket();
            new Thread(mt1).start();
            new Thread(mt1).start(); 
            new Thread(mt1).start();
            new Thread(mt1).start();
        }
    
    }
    
    class MyTicket implements Runnable{
        private int tickets = 100;
        
        public void run() {
            while(true){
                synchronized (Ticket.class) {
                    if (tickets <= 0) {
                        break;
                    }
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "这是第" + tickets -- + "张票");
                }
                
            }
        }
        
    }

      

    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    301重定向的代码
    小问题,小细节要注意(string类型转换为bool类型)
    关于添加网站适配的问题解决
    this.Page.Request.ServerVariables
    将一个字段的两个数据分开读取
    使用distinct出现的一个问题
    什么是集合是只读的?
    编辑完这一条数据如何继续转入下一条数据(快速编辑)
    系统信息相关命令
    用户权限相关命令
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11354013.html
Copyright © 2011-2022 走看看