A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© taozhihui 中级黑马   /  2016-9-14 01:09  /  476 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程(线程安全问题)(掌握)
        * 多线程并发操作同一数据时, 就有可能出现线程安全问题
        * 使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作
                public class Demo2_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) {
                                        synchronized(TicketsSeller.class) {
                                                if(tickets <= 0)
                                                        break;
                                                try {
                                                        Thread.sleep(10);//线程1睡,线程2睡,线程3睡,线程4睡
                                                } catch (InterruptedException e) {
                                                        e.printStackTrace();
                                                }
                                                System.out.println(getName() + "...这是第" + tickets-- + "号票");
                                        }
                                }
                        }
                }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马