Java 等待-通知实现的问题
我正在进行Java多线程处理,在分配了4个不同的文件之后,我将启动4个线程,以上传到服务器 我的目标是,当一个线程完成文件上传时,我需要启动另一个线程为其分配一个新文件 每次上传文件后,我都会收到来自服务器的通知 //用于添加第一组文件的代码Java 等待-通知实现的问题,java,multithreading,Java,Multithreading,我正在进行Java多线程处理,在分配了4个不同的文件之后,我将启动4个线程,以上传到服务器 我的目标是,当一个线程完成文件上传时,我需要启动另一个线程为其分配一个新文件 每次上传文件后,我都会收到来自服务器的通知 //用于添加第一组文件的代码 for (int count = 0; count < 4; count++) { if (it.hasNext()) { File current = new File((S
for (int count = 0; count < 4; count++) {
if (it.hasNext()) {
File current = new File((String) it.next());
try {
Thread t = new Thread(this, current );
t.start();
t.sleep(100);
} catch (Exception e) {
}
}
}
在run方法的最后一条语句中,我添加了以下语句
public void run (){
// Performing different operations
//Final statement of the run method below
synchronized (this) {
this.notifyAll();
}
}
目前,所有5个线程正在同时开始上传。
应该是前4个线程应该开始上传&第五个线程应该只在任何线程通知它已完成其操作时启动
任何关于错误线程实现的建议。扔掉它,使用java.util.concurrent.Executor。扔掉它,使用java.util.concurrent.Executor。你可以加入线程而不是等待它
try {
t.join();
}catch(InterruptedException e){
throw new RuntimeException(e);
}
tempThreadCounter++;
您可以在线程上加入,而不是等待线程
try {
t.join();
}catch(InterruptedException e){
throw new RuntimeException(e);
}
tempThreadCounter++;
您可以与一起使用,并将并发性指定为1。但实际上,那为什么需要多个线程呢?一个线程完成所有上传,这样用户界面保持响应就足够了
ExecutorService exec = Executors.newFixedThreadPool(1); //1 thread at a time
for (int count = 0; count < 4; count++) {
if (it.hasNext()) {
File current = new File((String) it.next());
exec.execute(new Runnable() {
@Override
public void run() {
upload(current);
}
});
}
}
exec.shutdown();
exec.awaitTermination(900, TimeUnit.SECONDS);
ExecutorService exec=Executors.newFixedThreadPool(1)//一次1个线程
对于(int count=0;count<4;count++){
if(it.hasNext()){
当前文件=新文件((字符串)it.next());
exec.execute(新的Runnable(){
@凌驾
公开募捐{
上传(当前);
}
});
}
}
exec.shutdown();
执行等待终止(900,时间单位秒);
您可以与一起使用,并将并发性指定为1。但实际上,那为什么需要多个线程呢?一个线程完成所有上传,这样用户界面保持响应就足够了
ExecutorService exec = Executors.newFixedThreadPool(1); //1 thread at a time
for (int count = 0; count < 4; count++) {
if (it.hasNext()) {
File current = new File((String) it.next());
exec.execute(new Runnable() {
@Override
public void run() {
upload(current);
}
});
}
}
exec.shutdown();
exec.awaitTermination(900, TimeUnit.SECONDS);
ExecutorService exec=Executors.newFixedThreadPool(1)//一次1个线程
对于(int count=0;count<4;count++){
if(it.hasNext()){
当前文件=新文件((字符串)it.next());
exec.execute(新的Runnable(){
@凌驾
公开募捐{
上传(当前);
}
});
}
}
exec.shutdown();
执行等待终止(900,时间单位秒);
我的目标是,当一个线程完成文件上传时,我需要启动另一个线程为其分配一个新文件。->如果它们不是并发执行,为什么有多个线程?我第一次启动4个线程。每当一个线程完成执行时,我需要将一个文件分配给一个新线程,直到所有文件都已上载。我的目标是,当一个线程完成文件上载时,我需要启动另一个线程为其分配一个新文件。->如果它们不是并发执行,为什么有多个线程?我第一次启动4个线程。每当一个线程完成执行时,我需要将一个文件分配给一个新线程,直到所有文件都上传完毕。谢谢回复。如果每次使用4个线程上传文件,直到所有文件都上传完毕,那么如何使上述代码工作?exec.com会为您这样做,它会等到所有文件都上传完毕。我已将超时设置为900秒,这是最大等待时间。如果您想增加上传的并发性,只需更改构造函数中的数字1(确保服务器部件也支持并发性)。谢谢您的回复。如果每次使用4个线程上传文件,直到所有文件都上传完毕,那么如何使上述代码工作?exec.com会为您这样做,它会等到所有文件都上传完毕。我已将超时设置为900秒,这是最大等待时间。如果您想增加上传的并发性,只需更改构造函数中的数字1(确保服务器部件也支持并发性)。