黑马程序员技术交流社区

标题: 线程并发处理机制 [打印本页]

作者: taozhihui    时间: 2016-9-14 01:09
标题: 线程并发处理机制
多线程(线程安全问题)(掌握)
        * 多线程并发操作同一数据时, 就有可能出现线程安全问题
        * 使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作
                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-- + "号票");
                                        }
                                }
                        }
                }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2