社区
Java SE
帖子详情
请教JAVA多线程同步的问题
m0ren
2005-09-08 01:04:49
1.进程阻塞在wait()后,当被恢复时,应该从哪一句开始继续运行?
2.notify()的具体工作机制是怎样的?好象在SCR里看不到它的代码。
3.notify()唤醒的,是相同对象产生的那些进程,那么用JAVA如何实现唤醒不同对象产生的进程?比如生产者与消费者问题,生产者进程如何唤醒消费者进程?
多谢!
...全文
136
1
打赏
收藏
请教JAVA多线程同步的问题
1.进程阻塞在wait()后,当被恢复时,应该从哪一句开始继续运行? 2.notify()的具体工作机制是怎样的?好象在SCR里看不到它的代码。 3.notify()唤醒的,是相同对象产生的那些进程,那么用JAVA如何实现唤醒不同对象产生的进程?比如生产者与消费者问题,生产者进程如何唤醒消费者进程? 多谢!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
congliu
2005-09-08
打赏
举报
回复
此文章的目的在于利用线程的互斥,解决生产者消费者问题。其中使用了关键字sychronized。
线程的内容可以一样,但是对应不同的内存地址。运行起来相互独立,是两个完全独立的进程。
producer.java文件:
package ProducerConsumer;
class Producer extends Thread
{
CircularBuffer cbp=null;
Producer(CircularBuffer cb){cbp=cb;}
public void run(){
for(int i=0;i<=50000;i++)
try{
cbp.put(i);
}
catch (Exception err){
//System.
}
}
// public static void main(String[] args) {}
}
ProCum文件:
package ProducerConsumer;
import java.io.*;
class ProCum{
public static void main(String[] args){
CircularBuffer cb=new CircularBuffer(20);
//因为要调用的两个方法put和get是排斥,所以调用时由同一个对象调用,所以
//都是cb,注意注意!!!!!!
Producer pro=new Producer(cb);
Consumer con=new Consumer(cb);
//
Thread a=null;
Thread b=null;
a=new Thread(pro);
b=new Thread(con);
b.start();
a.start();
}
}
Consumer.java文件:
package ProducerConsumer;
class Consumer extends Thread
{
CircularBuffer cbc=null;
Consumer(CircularBuffer cb)
{cbc=cb;}
public void run(){
for(int i=0;i<=50000;i++)
try{
cbc.get();
}
catch (Exception err){
}
}
}
CircularBuffer.java 文件:
package ProducerConsumer;
import java.io.*;
class CircularBuffer
{
int bufsize;
int[] store;
int numOfEntries=0;
int front=0;
int back=0;
CircularBuffer(int n)
{
bufsize=n;
store=new int[bufsize];
}
synchronized void put(int obj)throws Exception{
if(numOfEntries==bufsize)
{
System.out.println("Producer waiting");
wait();
}
store[back]=obj;
back++;
if(back==bufsize) back=0;
else {numOfEntries++;
System.out.println("putting "+ obj);
notify();
}
}
synchronized int get() throws Exception{
int result=0;
if(numOfEntries==0)
{
System.out.println("Consumer waiting");
wait();
}
else{
result=store[front];
front++;
if(front==bufsize) front=0;
numOfEntries--;
System.out.println("getting "+result);//;
notify();
}
return result;
}
public static void main(String[] args)
{
}
}
Java
中多
线程同步
问题
的解决方法
Java
中的多
线程同步
问题
是一个复杂的
问题
,但通过使用上述的多种方法,可以有效地解决这些
问题
。在实际开发中,应根据具体的需求和场景选择合适的同步方法。例如,对于简单的同步需求,可以使用关键字;对于需要更灵活锁机制的场景,可以使用;对于需要控制线程访问资源数量的场景,可以使用Semaphore等。同时,还应注意避免过度同步,以免影响程序的性能。希望本文的内容能够帮助读者更好地理解和解决
Java
多
线程同步
问题
。
java
多
线程同步
问题
_
JAVA
多
线程同步
问题
展开全部SynchronizationMy shelves are overflowing with books, including many duplicate books, out-of-date books, and books I haven't looked at for 10 years and probably never will again. Over the years, t...
Java
中如何有效避免多
线程同步
问题
?
简单来说,多
线程同步
问题
指的是当多个线程在没有正确同步机制的情况下,尝试访问和修改共享资源时,可能出现的数据不一致或不确定的行为。在设计线程模型时,我们需要考虑线程之间的协作关系、共享数据的访问方式以及潜在的同步
问题
。当一个线程进入同步方法或代码块时,它会获取一个监视器锁,其他试图进入同步方法或代码块的线程将被阻塞,直到锁被释放。然而,需要注意的是,原子变量并不能解决所有的同步
问题
。关键字提供了一种简单直观的同步方式,但过度使用可能会导致性能下降,因为每个被同步的代码块或方法在执行时都会阻塞其他线程。
java
多
线程同步
问题
_
JAVA
多线程
线程同步
问题
线程同步
在多线程的编程环境下,可能看着没有
问题
的代码在运行几千上万或者更多次后,出现了一些看着很奇怪的
问题
,出现这样的
问题
的原因就是可能会有两个或者更多个线程进入了同一块业务处理代码中导致了判断失效。为了解决这个
问题
,
JAVA
引入了同步监视器来解决这个
问题
。同步监视器的通用方法就是同步代码块,也就是给一块代码加了同步锁。package cn.test.hf;import
java
.math.Big...
java
多线程——
线程同步
问题
试想一个场景:同一个银行账户有1000RMB,两个对象同时对该账户取钱,两人各取800,流程如下: 输入帐号、密码,验证成功 输入取钱金额,系统比较账户余额和取钱金额 验证成功,允许取钱操作,然后,两个人一起开开心心的拿着1.6k回家了。剩下一个余额为-600的账户默默哭泣。 这就是我们常说的:多线程并发操作线程安全
问题
。 就取钱例子模拟代码实现: 1、定义一个账户
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章