您的位置:首页 > 编程语言 > Java开发

java同步代码块

2016-04-19 14:25 344 查看
/**
abc三个售票窗口,售50张票。

需求:可以做到同时销售,且不能卖重叠的,以及不能超过50

线程安全的原因:
当多条语句操作同一个线程共享数据时,一个线程对多语句只执行了一部分,没有执行完,另一个线程
就来执行语句,导致出现共享数据的错误。

解决方法:
对多条操作共享数据的语句,只能让一个线程执行,让其他线程不能执行

同步代码块
synchronized(对象){
同步代码块;
}

对象如同锁,持有锁的线程可以在同步中执行
没有持有锁的线程即使获得CPU的执行器,也无法执行。

同步前提:
1.多线程的代码块才需要同步,即run里的代码才需要加同步。对共享数据加同步
2.必须是多个线程使用同一个锁,才需要同步

好处:提高多线程的安全问题
弊端:多个线程需要判断锁,较为消耗资源

如何找多线程的问题:
1.明确哪些代码是多线程运行代码
2.明确共享数据
3.明确多线程中哪些语句操作共享数据的
*/
class Tickt implements Runnable //extends Thread{
{
private int tickt=10000;
Object obj = new Object();

public void run(){
while(true){
synchronized(obj){
if(tickt>0){
//try{Thread.sleep(100);}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+"售票员卖出:"+ tickt-- +"号票");
}
}
}
}
}

class SaleTickt{
public static void main(String[]args){
Tickt a = new Tickt();
Thread t1 = new Thread(a);
Thread t2 = new Thread(a);
Thread t3 = new Thread(a);
Thread t4 = new Thread(a);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  同步