网站首页 > 文章中心 > 其它

java通讯同步代码

作者:小编 更新时间:2023-10-24 11:12:32 浏览量:414人看过

java多线程解决同步问题的几种方式,原理和代码

在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法.管道方法不建议使用.

wait()/notify()方法

await()/signal()方法

BlockingQueue阻塞队列方法

PipedInputStream/PipedOutputStream

阻塞队列的一个简单实现:

java通讯同步代码-图1

public class BlockingQueue {

private List queue = new LinkedList();

private int ?limit = 10;

public BlockingQueue(int limit){

this.limit = limit;

}

java通讯同步代码-图2

public synchronized void enqueue(Object item)throws InterruptedException ?{

while(this.queue.size() == this.limit) {

?wait();

if(this.queue.size() == 0) {

?notifyAll();

this.queue.add(item);

public synchronized Object dequeue() ?throws InterruptedException{

while(this.queue.size() == 0){

if(this.queue.size() == this.limit){

return this.queue.remove(0);

}}

在enqueue和dequeue方法内部,只有队列的大小等于上限(limit)或者下限(0)时,才调用notifyAll方法.如果队列的大小既不等于上限,也不等于下限,任何线程调用enqueue或者dequeue方法时,都不会阻塞,都能够正常的往队列中添加或者移除元素.

生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程.与此同时,消费者也在缓冲区消耗这些数据.该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据.

要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据.同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者.

java 方法同步

Java的synchronized的同步代码块和同步方法的区别

同步代码块是并发的时候锁定一个代码块只能一个线程占用,同步方法是对方法的锁定,如果能同步代码块尽量不要同步方法,否则影响效率

java通讯同步代码-图3

java中同步的几种方法

Java的同步可以用synchronized关键字来实现.

sychronized可以同步代码,需要绑定一个对象,如synchronized(obj){}

也可以同步一个方法,是对方法进行线程同步.如public void synchronized methodA(){}

以上就是土嘎嘎小编为大家整理的java通讯同步代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章