请问java怎么实现两个线程同步?

我有两个线程A线程是在磁盘上创建一个文件,B线程是压缩这个文件,请问该如何同步处理?我的A线程是将一个word文件转换成pdf而B线程是再将此pdf文件转换为swf文件小... 我有两个线程A线程是在磁盘上创建一个文件,B线程是压缩这个文件,请问该如何同步处理?
我的A线程是将一个word文件转换成pdf而B线程是再将此pdf文件转换为swf文件
小弟线程学的不好,请各位给段简略的代码例子,(不用实现转换功能,就只是个操作文件同步的例子就行了,回答正确有高分追加!)
展开
 我来答
z53112700
2011-03-08 · TA获得超过503个赞
知道小有建树答主
回答量:314
采纳率:0%
帮助的人:299万
展开全部
第一种 使用Lock 第二种 synchronized (a) A 做完了 释放a B继续锁住a 就可以了
synchronized 锁住的时候 其他对象是不能访问的 这样实现同步

你定义一个数 随便定义 如 int i=10;
在 word文件转换成pdf 的方法里 添加 synchronized (i) 记得方法结束一定要释放 wait() notify()
同理 另外一个方法也是添加 synchronized (i) 由于锁住的是一个同一个对象 (属性也是可以滴。。) 所以不释放 另外一个线程不会调用这个方法
左手编码
推荐于2016-08-31 · TA获得超过756个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:348万
展开全部
首先两个线程都要操作pdf文件。如果同时操作会出错,这里有个先后顺序。设置一把锁,这个锁就是这个pdf文档对象。
public class ATread extends Thread{
private PDF pdf;
public AThread(PDF pdf){
this.pdf=pdf;
}
public void run(){
写入内容
pdf.notify();//唤醒B线程
}
}

public class BTread extends Thread{
private PDF pdf;
public BThread(PDF pdf){
this.pdf=pdf;

public void run(){
if(可读文件为空){
//等待A线程写入内容到pdf文档
pdf.wait();
}
else{
进行转换

}
}
}

public class PDF{

public PDF(){
File f=new File("xxx.pdf");
if(f不存在)
创建f;
}
}

public class MainClass{
public static void main(String[] args){
PDF pdf=new PDF();
AThread A=new AThread(pdf);
BThread B=new BThread(pdf);
A.start();
B.start();
}
}

如果是B先拿到cpu时间,因为文件是空的,B会等待,直到A转换完成唤醒B。B等待的时候,剩下A和main线程抢cpu。main拿到cpu对程序没影响。我不清楚压缩的原理,所以不知道可不可以不用等待A一次完成再去唤醒B,然后A再写入新的东西。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daay1986
2011-03-08 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1464万
展开全部
靠,你这能叫同步吗,你还敢这边没写完那边就开始压缩啊。学东西都学死了,在多线程下去连死活都能并发了,一边死一边复活。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ac86dcb93
2011-03-08 · TA获得超过116个赞
知道答主
回答量:176
采纳率:0%
帮助的人:144万
展开全部
对同一个对象进行加锁。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式