您的位置:首页 > 职场人生

[黑马程序员]多线程_安全

2014-03-16 13:44 162 查看
/*
* 需求:简单的买票程序
* 多个窗口买票。
*
* 会有安全问题。
*
*
* 问题的原因:
* 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完。
* 另一线程参与进来执行,导致共享数据的错误。
*
* 解决办法:
* 多多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以进行执行。
*
* 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--);
}
}

}
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: