同步,是Object里的方法吗?是用来设定线程用的吗?? 我很不理解这个方法的作用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 释放对象锁的情况:synchronized()语句块执行完,synchronized()语句块出现异常、持有锁的线程调用该对象的wait()方法。 多个线程同时访问同一个资源,如果线程之间协调不好的话,很容易出现前后数据不一致的情况。要想处理好这种情况可以使用线程同步。线程同步可以保证当一个线程(例如叫A线程)在访问一个资源的时候,其他的线程只能暂时的等待,当A线程把任务完成后才轮到其他的线程。可以在方法前面加一个synchronized关键字比如说: class Test { synchronized void add() { }}这样的话,当A线程来执行这个add方法时,A线程会把当前对象(也就是Test类的一个实例对象)给锁住了拿到了这个对象的锁。这样的话,其他线程暂时无法拿到这个对象的锁,就没有办法访问add方法,只能乖乖的等待,等A线程执行完后,释放了该对象的锁之后,才轮到其他线程来执行add方法。 有个很精点的例子,就是生产者与消费者的模型,生产与消费之间有一个缓冲仓库,仓库就是用同步实现的,public String push_pro(String pro){ //生产 lock.lock() //加锁 while(仓库==满){ 生产者线程等待; } 生产产品; 仓库+1; lock.unlock(); return pro; }public String get_pro(){ //消费 lock.lock() //加锁 while(仓库==空){ 消费者线程等待; } 消费产品; 仓库-1; lock.unlock(); return pro;}也可以用synchronized来实现。呵呵,2楼的说的很好! java socket通信运行出错,请高手帮下忙,多谢。。。 马士兵的oracle在哪有下载 JProgressBar 无法自动更新是什么原因?? 一个关于怎么结束流的问题 想研究下sun公布的jvm源代码,有志者看进来! java的applet问题?请高手看看! jlabel setsize()为什么不管用 什么是CVS呀, 我的JBuilder 6.0怎么用不了呢? Java浏览器怎么实现? jComboBox选择变化问题 eclipse问题
很容易出现前后数据不一致的情况。要想处理好这种情况
可以使用线程同步。线程同步可以保证当一个线程(例如叫A线程)在访问
一个资源的时候,其他的线程只能暂时的等待,当A线程把任务完成后才轮到其他的线程。可以在方法前面加一个synchronized关键字比如说:
class Test {
synchronized void add() {
}
}
这样的话,当A线程来执行这个add方法时,
A线程会把当前对象(也就是Test类的一个实例对象)给锁住了拿到了
这个对象的锁。这样的话,其他线程暂时无法拿到这个对象的锁,就没有办法
访问add方法,只能乖乖的等待,等A线程执行完后,释放了该对象的锁之后,才轮到其他线程来
执行add方法。
public String push_pro(String pro){ //生产
lock.lock() //加锁
while(仓库==满){
生产者线程等待;
}
生产产品;
仓库+1;
lock.unlock();
return pro;
}public String get_pro(){ //消费
lock.lock() //加锁
while(仓库==空){
消费者线程等待;
}
消费产品;
仓库-1;
lock.unlock();
return pro;
}也可以用synchronized来实现。呵呵,2楼的说的很好!