您的位置:程序门 -> java -> j2se / 基础类



线程中有循环,如何能够安全中止线程


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


线程中有循环,如何能够安全中止线程[已结贴,结贴人:ccdjk]
发表于:2007-02-02 10:31:19 楼主
最近做一个awt的udp小程序
服务器端要实时检测端口
需要一个循环实现
不知道在线程中如何实现安全中止线程
用thread.stop()界面会有问题
简单代码如下:
public   class   udp_thread   extends   thread
{
        private   int   port;
        private   int   buffer_size;
        private   jtextarea   mem_message;

        public   udp_thread(int   port,   int   buffer_size,   jtextarea   mem_message)
        {
                this.port   =   port;
                this.buffer_size   =   buffer_size;
                this.mem_message   =   mem_message;
        }

        public   void   run()
        {
                byte[]   buffer   =   new   byte[buffer_size];
                try
                {
                        datagramsocket   server   =   new   datagramsocket(port);
                        while(true)
                        {
                                datagrampacket   packet   =   new   datagrampacket(buffer,   buffer.length);
                                server.receive(packet);
                                if   (packet.getlength()   <=   0)
                                        continue;
                                this.respond(packet);
                        }
                }
                catch   (exception   ex)
                {
                        system.out.println(ex.getmessage());
                }
        }

        public   void   respond(datagrampacket   packet)
        {
                byte[]   buffer   =   new   byte[packet.getlength()];
                system.arraycopy(packet.getdata(),   0,   buffer,   0,   packet.getlength());
                try
                {
                        string   str   =   new   string(buffer,   "8859_1 ");
                        mem_message.append(packet.getaddress()   +   "   [ "   +   packet.getport()   +   "]   :   "   +   str   +   "\r\n ");
                }
                catch   (exception   ex)
                {
                }
        }
}
发表于:2007-02-02 10:42:491楼 得分:13
从你的程序看,只有发生了异常,线程才能结束。

你要中断线程,总归是有条件中断吧?把这个条件加到
while里面不就可以了,不要一直true。
发表于:2007-02-02 10:43:562楼 得分:13
thread.stop()由于其破坏了对象的完整性   已经在jdk1.5起不建议使用了~~随着时间推移可能将
弃用~~取而代之的是  void   interrupt()         中断线程。   lz可以试试
发表于:2007-02-02 10:55:193楼 得分:13
在线程中加入标志变量,每次循环都检查该标志,如果为一特定值,则退出,线程结束。
发表于:2007-02-02 11:05:424楼 得分:0
void   interrupt()不行
加入标志变量我试了  
可是server.receive(packet);必须接收一次客户端udp的数据
才能够进入下次循环然后退出
发表于:2007-02-02 11:07:315楼 得分:10
boolean   b=true;
while(b){把b的值改为false}
发表于:2007-02-02 11:12:446楼 得分:13


boolean   flag   =   true;

while(flag){
        dosomething;
        if(need   interrupt){
                flag   =   false;
        }

}
发表于:2007-02-02 11:27:117楼 得分:13
设定一个标志变量,给这个变量写一个set方法,假设你线程的实例为udp_thread   a;在需要停止线程的地方调用
a.setexitflag(true);
a.interrupt();
while(a.isalive());//等待线程结束

发表于:2007-02-02 11:42:548楼 得分:13
同意楼上的意见设置标志
或者packet   在发送的包里存储些字符   如果是1就终止   然后你收到包后取出内容判断
发表于:2007-02-02 12:56:099楼 得分:12
bluesmile979(笑着)   正解
发表于:2007-06-25 17:32:3610楼 得分:0
make


快速检索

最新资讯
热门点击