• 线程安全问题


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

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

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

      * 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 -- + "张票");
                }
                
            }
        }
        
    }

      

    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    qt中文乱码问题
    【Qt开发】QThread 实用技巧、误区----但文档中没有提到
    TCP/UDP网络性能测试工具
    wireshark怎么抓包、wireshark抓包详细图文教程
    INDEX--从数据存放的角度看索引2
    杂谈--从基数评估来看问题1
    INDEX--从数据存放的角度看索引
    疑难杂症--为数据库主文件所在磁盘保留一定量磁盘空间
    统计--VARCHAR与NVARCHAR在统计预估上的区别
    杂谈--SQL SERVER版本
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11354013.html
Copyright © 2020-2023  润新知