请教一下Java的多线程机制疑惑。
public class Server implements Runnable
{
private Thread myThread;
private boolean server_exit;
public Server(boolean daemonThraed )
{
myThread = new Thread( this );
if ( daemonThraed )
{
myThread.setDaemon( true );
}
myThread.start();
}
public void run()
{
while ( !server_exit )
{
//处理连接
}
}
}
对于以上代码,一开始的时候Server一个实例在运行。那么第一个连接进来了,就由run中处理连接部分代码处理他。几乎同时,第二个连接进来了,是不是因为多进程的原因,系统又开辟了一新的线程处理?? 而不需要让第二个连接处理完毕??还是什么。。。谁能说说?高分赠与。。
问题点数:100、回复次数:13Top
1 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-03-22 22:48:03 得分 0
不是因为多进程的原因,系统又开辟了一新的线程处理?? 而不需要让第二个连接处理完毕??
对
你理解就是这样
Top
2 楼seadaughter(我喜欢月亮,温柔、博大,寒冷的温暖)回复于 2006-03-22 22:51:01 得分 0
interpb(曾曾胡) :
你的意思是说,如果我的代码如下:
public class Server //没有实现Runnable接口
{
private Thread myThread;
private boolean server_exit;
public Server(boolean daemonThraed )
{
}
public void run()
{
while ( !server_exit )
{
//处理连接
}
}
}
这样的话,第一个连接进来了,第二个也进来的话,在第一个被处理完全之前,都不予理会,甚至抛弃??是这样吗?Top
3 楼Dan1980()回复于 2006-03-22 22:58:02 得分 30
楼主,你的代码只有一个线程啊(main线程除外),怎么存在“第一个连接进来了……几乎同时,第二个连接进来了”?Top
4 楼seadaughter(我喜欢月亮,温柔、博大,寒冷的温暖)回复于 2006-03-22 23:02:32 得分 0
to Dan1980(不用IDE的大傻瓜):
嗯,只有一个线程?
1、那么如果要实现同时多个连接进来,也能同时处理。怎么写(伪代码)?
2、按照你所说。。岂不是上面跟单线程没区别。。代码如下:
public class Server //没有实现Runnable接口
{
private Thread myThread;
private boolean server_exit;
public Server(boolean daemonThraed )
{
}
public void run()
{
while ( !server_exit )
{
//处理连接
}
}
}
Top
5 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-03-22 23:10:14 得分 10
如果你的服务器没有实现多线程 那它同时只能处理一个请求
你说的情况完全有可能
Top
6 楼seadaughter(我喜欢月亮,温柔、博大,寒冷的温暖)回复于 2006-03-22 23:13:02 得分 0
interpb(曾曾胡):
假设我的服务器代码就是那个呢。。只能同时处理一个请求?
那么如果我需要同时处理多个。该怎么写?Top
7 楼Dan1980()回复于 2006-03-23 02:55:15 得分 10
main方法呢?没看到程序是如何启动的,怎么知道你倒底有几个线程?
一个Runnable可以被N个线程启动的,但如果没有实现Runnable,你new Thread(this)的时候就要报编译错误啦,还存在什么线程??Top
8 楼LuJianjun5(用一首歌的时间怀念你……)回复于 2006-03-23 03:17:05 得分 10
同时处理几个就 new 几个线程
然后start 他们Top
9 楼ys_wangtao(用技术创造艺术)回复于 2006-03-23 11:32:14 得分 20
在run()方法中加入Thread.sleep()方法,多个线程会同时执行Top
10 楼seadaughter(我喜欢月亮,温柔、博大,寒冷的温暖)回复于 2006-03-23 12:52:09 得分 0
启动就是 Server se=new Server();
这样子呢。Top
11 楼Dan1980()回复于 2006-03-23 12:55:44 得分 10
每次new Server();就启动了一个线程啊。Top
12 楼seadaughter(我喜欢月亮,温柔、博大,寒冷的温暖)回复于 2006-03-23 14:05:37 得分 0
噢。。。我好像明白了。。大家再去解释一下以下这个?
http://community.csdn.net/Expert/topic/4634/4634603.xml?temp=.7479669Top
13 楼Mark_Chen(雨枫)回复于 2006-03-23 14:17:57 得分 10
几个new Thread()就有几个线程!Top




