多线程控制问题 多线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、那你就干脆顺序执行呗,这样最简单了。2、非要用线程的话可以用wait和notify方法,设置一个锁对象,让1在结束的时候调用锁的notify方法,让2在开始的时候调用wait方法。建议你在网上找找这两个方法的例子,很多的,先看看。 用wait 的话 怎么确定wait的等待时间呀呢 在循环的末尾休眠1秒以防没有顺序执行线程,即public static void main(String[] args) {for(int i = 0 ;i<5 ;i++){if(0 == i){new MyThread1().start();}else if(1 ==i){new MyThread2().start();}else if(2 ==i){new MyThread3().start();}else if(3 ==i){new MyThread4().start();}else if(4 ==i){new MyThread5().start();}Thread.sleep(1000);}}补充 楼上的说法不行的,用wait notify的话 那就是单线程了,没有起到并发效果 countdownlatch用起来很简单 可以深入研究一下 用wait 的话 怎么确定wait的等待时间呀呢不需要确定等待时间,到时候线程1运行完了会调用notify通知的。http://blog.csdn.net/zyplus/article/details/6672775 供你参考。这个说法完全不对。也是没有理解多线程。 好吧,我承认我之前没看清楼主的意图,但是我不知道这样顺序执行线程有什么用?为什么不在main里顺序调用run()方法,当成普通方法调用就行了,开线程有什么用? 呵呵,也不知道谁没理解多线程。 好吧,我承认我之前没看清楼主的意图,但是我不知道这样顺序执行线程有什么用?为什么不在main里顺序调用run()方法,当成普通方法调用就行了,开线程有什么用? 呵呵,也不知道谁没理解多线程。我告诉楼主用不着多线程,单线程就行了,他不同意,非要用多线程,那我就只好告诉他多线程怎么弄咯。我说你没理解不是指没理解楼主,而是你post的这段代码:12345678910111213141516public static void main(String[] args) {for(int i = 0 ;i<5 ;i++){if(0 == i){new MyThread1().start();}else if(1 ==i){new MyThread2().start();}else if(2 ==i){new MyThread3().start();}else if(3 ==i){new MyThread4().start();}else if(4 ==i){new MyThread5().start();}Thread.sleep(1000);}}你加的Thread.sleep(1000);其实没有用处,起不到任何作用,达不到多个线程之间协调运行的作用,所以我说你没理解清楚。 我刚开始以为楼主的意思是后续的线程不能先于前面的线程运行,就加了sleep 1秒,这样应该是可以的。比如说 保证mythread2不会在mythread1前面运行 虽然没看懂楼主什么意图,但下面代码可以实现:public static void main(String[] args) { for(int i = 0 ;i<5 ;i++){ if(0 == i){ MyThread1 t1 = new MyThread1(); t1.start(); t1.join(); }else if(1 ==i){ MyThread2 t2 = new MyThread2(); t2.start(); t2.join(); }else if(2 ==i){ MyThread3 t3 = new MyThread3(); t3.start(); t3.join(); }else if(3 ==i){ MyThread4 t4 = new MyThread4(); t4.start(); t4.join(); }else if(4 ==i){ MyThread5 t5 = new MyThread5(); t5.start(); t5.join(); } }} package executortest;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Exetest { private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor(); public static void main(String[] args) { for(int i =0;i<5;i++){ EXECUTOR.execute(new MyRun("thread"+i)); } EXECUTOR.shutdown(); }}class MyRun implements Runnable{ private String name; public MyRun(String name) { this.name = name; } @Override public void run() { try { long l = (long) (Math.random()*1000); Thread.sleep(l); System.out.println("----------------------"+name+"--------耗时:"+l); } catch (InterruptedException e) { e.printStackTrace(); } }} 楼主既然是按顺序执行不需要多线程哦,不要在if里面启动new Thread().start()直接调用业务方法就行 谁能说说学好面向对象的好方法? 学习JavaEE的步骤 关于ssh2的多数据源问题 tomcat 直接被关闭 Spring AOP 前置运行示例 遇到一个问题 我在java中使用socket进行简单的传递对象通信的时候出错···跪地请求您的帮助···好人们帮帮我吧···我都向您下跪了 急!谢谢 求java(b/s)客房管理系统源代码+100分 JAVA软件工程师(从事电信项目) hibernate 查询遇上麻烦事,请高手指教 关于xml文档解析的小程序题 myeclipse 安装svn插件后不起作用 mysql-connector-java-gpl-5.1.31.msi 怎么用
2、非要用线程的话可以用wait和notify方法,设置一个锁对象,让1在结束的时候调用锁的notify方法,让2在开始的时候调用wait方法。建议你在网上找找这两个方法的例子,很多的,先看看。
用wait 的话 怎么确定wait的等待时间呀呢
public static void main(String[] args) {
for(int i = 0 ;i<5 ;i++){
if(0 == i){
new MyThread1().start();
}else if(1 ==i){
new MyThread2().start();
}else if(2 ==i){
new MyThread3().start();
}else if(3 ==i){
new MyThread4().start();
}else if(4 ==i){
new MyThread5().start();
}
Thread.sleep(1000);
}
}
补充 楼上的说法不行的,用wait notify的话 那就是单线程了,没有起到并发效果
用wait 的话 怎么确定wait的等待时间呀呢
不需要确定等待时间,到时候线程1运行完了会调用notify通知的。http://blog.csdn.net/zyplus/article/details/6672775 供你参考。这个说法完全不对。也是没有理解多线程。
好吧,我承认我之前没看清楼主的意图,但是我不知道这样顺序执行线程有什么用?为什么不在main里顺序调用run()方法,当成普通方法调用就行了,开线程有什么用? 呵呵,也不知道谁没理解多线程。
好吧,我承认我之前没看清楼主的意图,但是我不知道这样顺序执行线程有什么用?为什么不在main里顺序调用run()方法,当成普通方法调用就行了,开线程有什么用? 呵呵,也不知道谁没理解多线程。我告诉楼主用不着多线程,单线程就行了,他不同意,非要用多线程,那我就只好告诉他多线程怎么弄咯。我说你没理解不是指没理解楼主,而是你post的这段代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
for(int i = 0 ;i<5 ;i++){
if(0 == i){
new MyThread1().start();
}else if(1 ==i){
new MyThread2().start();
}else if(2 ==i){
new MyThread3().start();
}else if(3 ==i){
new MyThread4().start();
}else if(4 ==i){
new MyThread5().start();
}
Thread.sleep(1000);
}
}你加的Thread.sleep(1000);其实没有用处,起不到任何作用,达不到多个线程之间协调运行的作用,所以我说你没理解清楚。
我刚开始以为楼主的意思是后续的线程不能先于前面的线程运行,就加了sleep 1秒,这样应该是可以的。比如说 保证mythread2不会在mythread1前面运行
for(int i = 0 ;i<5 ;i++){
if(0 == i){
MyThread1 t1 = new MyThread1();
t1.start();
t1.join();
}else if(1 ==i){
MyThread2 t2 = new MyThread2();
t2.start();
t2.join();
}else if(2 ==i){
MyThread3 t3 = new MyThread3();
t3.start();
t3.join();
}else if(3 ==i){
MyThread4 t4 = new MyThread4();
t4.start();
t4.join();
}else if(4 ==i){
MyThread5 t5 = new MyThread5();
t5.start();
t5.join();
}
}
}
package executortest;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Exetest {
private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor();
public static void main(String[] args) {
for(int i =0;i<5;i++){
EXECUTOR.execute(new MyRun("thread"+i));
}
EXECUTOR.shutdown();
}
}
class MyRun implements Runnable{
private String name;
public MyRun(String name) {
this.name = name;
} @Override
public void run() {
try {
long l = (long) (Math.random()*1000);
Thread.sleep(l);
System.out.println("----------------------"+name+"--------耗时:"+l);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}