/* * 需求:简单的买票程序 * 多个窗口买票。 * * 会有安全问题。 * * * 问题的原因: * 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完。 * 另一线程参与进来执行,导致共享数据的错误。 * * 解决办法: * 多多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以进行执行。 * * java对多线程的安全问题,提供了专业的解决方式: * --》同步代码块 * * synchronized(对象) * { * 需要同步的代码块 * } * * * 同步的前提: * 1.必须要有两个或者两个以上的线程 * 2.必须是多个线程使用同一个锁。 * * 必须保证同步中只有一个线程执行。 * * 好处:解决多线程安全问题 * 弊端:多个线程都需要判断锁,较为消耗资源 */ package test.itheima; public class ThreadTicketDemo { /** * @param args */ public static void main(String[] args) { /* * Ticket t1 = new Ticket(); Ticket t2 = new Ticket(); Ticket t3 = new * Ticket(); Ticket t4 = new Ticket(); * * t1.start(); t2.start(); t3.start(); t4.start(); */ Ticket t = new Ticket(); Thread t1 = new Thread(t); Thread t2 = new Thread(t); Thread t3 = new Thread(t); Thread t4 = new Thread(t); t1.start(); t2.start(); t3.start(); t4.start(); } } class Ticket implements Runnable {// Thread { private static int tick = 10000; Object obj = new Object(); public void run() { while (true) { synchronized (obj) { if (tick > 0) { try{Thread.sleep(1000);}catch(Exception e){} System.out.println(Thread.currentThread().getName() + " sale: " + tick--); } } } } }
[黑马程序员]多线程_安全
最新推荐文章于 2014-04-19 22:48:51 发布