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

      

    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    Oracle数据库的左连接和右连接(+)
    Web文件上传模块 Plupload
    增加反向链接的35个技巧
    google map api 与jquery结合使用(1)控件,监听器[转帖]
    教你在windows 7/xp 下安装使用mencoder
    Oracle 全文索引
    提高关键词排名的28个SEO技巧
    二叉树遍历及C语言实现
    小额担保业务管理系统详细设计介绍
    C#与数据结构二叉树的遍历
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/11354013.html
Copyright © 2011-2022 走看看