社区
Java SE
帖子详情
请教JAVA多线程同步的问题
m0ren
2005-09-08 01:04:49
1.进程阻塞在wait()后,当被恢复时,应该从哪一句开始继续运行?
2.notify()的具体工作机制是怎样的?好象在SCR里看不到它的代码。
3.notify()唤醒的,是相同对象产生的那些进程,那么用JAVA如何实现唤醒不同对象产生的进程?比如生产者与消费者问题,生产者进程如何唤醒消费者进程?
多谢!
...全文
98
1
打赏
收藏
请教JAVA多线程同步的问题
1.进程阻塞在wait()后,当被恢复时,应该从哪一句开始继续运行? 2.notify()的具体工作机制是怎样的?好象在SCR里看不到它的代码。 3.notify()唤醒的,是相同对象产生的那些进程,那么用JAVA如何实现唤醒不同对象产生的进程?比如生产者与消费者问题,生产者进程如何唤醒消费者进程? 多谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
实验,包括源程序和题目要求(很详细)
7. **多线程**:
Java
提供了强大的多线程支持,通过Thread类或Runnable接口可以实现并发执行。理解
线程同步
和互斥的概念,以及synchronized关键字、wait()、notify()方法的使用,是进行并发编程的基础。 8. **设计...
北师珠信院
Java
期末考试复习题.zip
14. **Chapter 14 - 多线程**:介绍线程的创建、同步机制(synchronized、wait/notify、ReentrantLock),以及线程池。 15. **Chapter 15 - 文件与文件流**:涉及文件的创建、读写、复制,以及文件流的操作。 16. ...
java
语言复习药店
8. **多线程**: 复习线程的创建(通过Thread类或Runnable接口)、
线程同步
(synchronized关键字、wait/notify机制)、线程池等概念。 9. **网络编程**:
Java
提供了Socket编程接口,可以用于实现客户端和服务端的...
2022年
java
学习心得体会例文.docx
7. 线程:
Java
支持多线程编程,允许并发执行任务。线程管理是提高程序效率的重要手段,但同时也需要处理好同步和互斥
问题
,以避免数据竞争。 在学习过程中,保持信心、恒心和毅力至关重要。遇到困难时,不应轻易...
SCJP题库,有了它必过
6. 多线程:线程的创建、同步和通信。 7. 类加载机制:理解类加载的过程和双亲委派模型。 同时,了解JVM(
Java
虚拟机)的工作原理、
Java
编程规范以及如何阅读和分析错误日志也是必备技能。在实际做题过程中,遇到不...
Java SE
62,630
社区成员
307,264
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章