• 线程安全问题


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

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

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

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

      

    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    vue.js 快速入门
    简洁的MVC思想框架——Nancy(Post操作与外部引用css和JS)
    简洁的MVC思想框架——Nancy(环境配置与Get操作)
    iOS开发之注册推送通知权限
    iOS开发之数组排序
    iOS开发之打包上传报错: ERROR ITMS-90087/ERROR ITMS-90125
    iOS开发之HTTP与HTTPS网络请求
    iOS开发之GCD同步主线程、异步主线程
    iOS开发之获取时间戳方法
    iOS开发之将字典、数组转为JSON字符串方法
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11354013.html
Copyright © 2020-2023  润新知