public void dosomething(){
for(i=0;i<5;i++){
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
try {
Socket socket = new Socket("127.0.0.1",portarr[i]);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
).start();
}
}
这段代码当第一个port:10000连接超时,之后循环直接跳到port:10004了,求解决方法
------解决方案--------------------
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class MyThread extends Thread
{
private int port;
public MyThread(int port)
{
this.port = port;
}
@Override
public void run()
{
try
{
Socket socket = new Socket("127.0.0.1", port);
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public class ThreadPool
{
public void init()
{
int[] portarr = {10000, 10001, 10002, 10003, 10004};
for (int i = 0; i < 5; i++)
{
new MyThread(portarr[i]).start();
}
}
}
不知道这样能不能达到你的要求
------解决方案--------------------
其实,你没有弄清楚线程的运行机制,当你开启了一个线程意识就是执行了start()方法,那么这个线程不一定马上就得到执行知道吗?这个是看操作系统的cpu去调用那个,这些线程是教给操作系统去调度的。打个比方吧~~皇帝就是cpu,皇帝的亲信帮了找来了几个妃子(线程),这些妃子都打扮好了,就等待着皇帝宠幸了,可以这几个妃子,皇帝才不怪那个妃子先进来先呢?他看中那个就宠幸谁先,这个是皇帝决定的,不是你妃子能决定的。你妃子只要打扮好就行了,其他的由其他人决定,不知道你理解了没有。希望对你有帮助。至于线程间的顺序执行,这个就是线程的互斥。看你怎么控制让第一个线程先执行,第二个线程先执行。