导航:首页 > 编程语言 > java多线程监听

java多线程监听

发布时间:2024-04-29 14:02:52

java怎样结束带ServerSocket监听的线程

ss.accept()阻塞了,无法结束该线程 。既不能被打断,也不能强制结束。你应该想别的办法,而不应该尝试结束这个线程。

Ⅱ JAVA多线程程序设计,有追加100分

package com;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ColorThread
{

public static void main(String[] args)
{

Myframe mf =new Myframe();//实例化对象
Thread t=new Thread(mf);//加入线程
t.start();//启动线程
}
}

class Myframe extends JFrame implements Runnable,ActionListener
{
private static final long serialVersionUID = 1L;
Random rand = new Random(System.currentTimeMillis());//随机数.用当前系统时间做基数
JPanel panel = new JPanel();//变色的面板
final JButton button = new JButton("点击停止或启动");//按钮
int action=0;//变色或停止变色 判断标示
public Myframe()
{
super("1/10秒变色1次");
button.setBounds(10, 10, 200, 30); //设置按钮坐标
button.addActionListener(this); //设置按钮监听
panel.setBounds(10, 50, 100, 100); //面板坐标
panel.setBackground(Color.BLUE); //面板初始颜色
this.setBounds(100, 100, 300, 300); //frame 初始大小坐标
this.add(panel); //将面板加入frame
this.setLayout(null); //设置frame布局为null
this.add(button); //将按钮加入frame
this.setDefaultCloseOperation(3); //设置关闭frame就退出程序
this.setVisible(true); //设置frame显示为可见
}
/**
* 实现Runnable线程接口
*/
public void run()
{
while (true)//设置死循环
{
try
{
if(action==0)//判断操作为0时改变面板背景颜色
{
panel.setBackground(getcolor()); //变色
}
Thread.sleep(100);//10之一秒 的休眠
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
private Color getcolor() //获得颜色
{
return new Color(getNum(), getNum(), getNum());
}
private int getNum() //获得小于255的随机数字
{
return rand.nextInt(255);
}
public void actionPerformed(ActionEvent e)//监听事件
{
if(action==0) //点击后判断.修改值.
{
action =1;
}else
{
action =0;
}

}
}
//有注释了

Ⅲ java多线程的好处

多线程可以把任务分块执行,分块后可以同时进行而不用等待。 这样效率更高
如下载文件,通过多线程就可以实现多文件下载

Ⅳ java中的事件监听是怎样实现随时监听的,是通过线程吗

java中的事件监听不是通过线程实现的,它是通过一种注册--通知机制实现的。在专java的设计模式中,有一种模属式叫:观察者模式,和这个类似。

Ⅳ java DatagramSocket receive 方法 接收 多个包

多线程,用一个线程监听,如果接到包,创建一个线程处理,继续监听。保证一直有一个线程在监听就可以了。

Ⅵ java自定义事件,线程a如何每一秒钟触发一个事件,然后另一个线程b监听之,并作出反应

思路,在线程b的操作中调用a.wait(),线程a中触发的事件后面添加notify(),则在b执行到a.wait()的时候,回b等待a,a执行到notify(),通知a的等答待列表中的b线程进入锁池,此时b有机会继续执行,这样就打到了线程b监听a执行完事件

Ⅶ java中如何监听一个线程的结束

你可以把抄thread的执行的代码 全部TRY CATCH起来啊 如果报异常了 就发送请求给SERVLET啊 如果正常结束完成 你也可以坐响应的处理啊 。
Runtime.getRuntime().addShutdownHook(Thread);当程序出现问题时会先启动Thread这个线程,
帮你解决记录或或者其他线程的关闭。

Ⅷ java 澶氱嚎绋嬬洃鍚鏁版嵁琛ㄧ殑鏀瑰彉锛屾庝箞瑙e喅鍚屾ラ棶棰

鍣锛屾槸杩欐牱鐨勶紝涓嶆槸浠涔堜笢瑗块兘鑳藉綋鍋氶攣锛屼綘涓嶈兘杩欐牱鐞嗚В銆
synchronized(obj)锛宱bj杩欓噷鏄浣犳墍鍦ㄧ被鐨凪IDlet鐨勪竴涓瀹炰緥瀵硅薄銆

鐩鐨勬槸瑙e喅鍥犵嚎绋嬩笉鍚屾ヨ屽规暟鎹閫犳垚鐮村潖鐨勯棶棰樸
鍋囧傦細鍦ㄤ竴涓绫讳腑鏈変竴涓鎴愬憳鍙橀噺a,杩樻湁涓や釜绾跨▼锛屽傛灉绾跨▼涓嶅悓姝ョ殑璇濓紝杩欎袱涓绾跨▼鏈夊彲鑳藉悓鏃惰块棶鍚屼竴涓鍙橀噺a,杩欐牱鐨勮瘽锛屽氨浼氬嚭鐜伴棶棰橈紝鏈鍚庢墽鐨勭粨鏋渁鍒板簳鏄鍑犲憿锛屾墍浠ュ氨瑕佷娇鐢ㄧ嚎绋嬪悓姝ヨ繖涓鍔炴硶浜嗐

浣跨敤绾跨▼鍚屾ュ悗锛岀嚎绋1鍦ㄨ块棶a鐨勬椂鍊欙紝鎴戝姞浜嗕竴鎶婇攣锛屽湪杩欎釜鏃跺欏埆鐨勭嚎绋嬫槸涓嶅厑璁歌块棶a鐨勶紝绛夌嚎绋1瀵筧鏈夎块棶缁撴潫鍚庯紝灏变細鍘绘帀杩欐妸閿侊紝鍏朵粬鐨勭嚎绋嬪啀璁块棶a鐨勬椂鍊欙紝鍙堜細鍔犻攣锛岃繖鏍峰湪鍚屼竴鏃跺欙紝鍙鑳芥湁涓鏂硅块棶a,杩欐牱灏变笉浼氬嚭鐜伴棶棰橈紝鎴戣磋繖涔堝氾紝浣犳槑鐧戒簡鍚楋紵甯屾湜浣犺兘鏄庣櫧锛屼笉鐒舵垜璇寸殑绠楃櫧璇翠簡锛屽懙鍛碉紒锛侊紒锛

Ⅸ 如何正确结束Java线程

1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。
3. 使用interrupt方法中断线程。

1. 使用退出标志终止线程
当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务。在这种情况下,一般是将这些任务放在一个循环中,如while循环。如果想让循环永远运行下去,可以使用while(true){……}来处理。但要想使while循环在某一特定条件下退出,最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环是否退出。下面给出了一个利用退出标志终止线程的例子。
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // 主线程延迟5秒
thread.exit = true; // 终止线程thread
thread.join();
System.out.println("线程退出!");
}
}
在上面代码中定义了一个退出标志exit,当exit为true时,while循环退出,exit的默认值为false.在定义exit时,使用了一个Java关键字volatile,这个关键字的目的是使exit同步,也就是说在同一时刻只能由一个线程来修改exit的值,

2. 使用stop方法终止线程
使用stop方法可以强行终止正在运行或挂起的线程。我们可以使用如下的代码来终止线程:
thread.stop();
虽然使用上面的代码可以终止线程,但使用stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用stop方法来终止线程。

3. 使用interrupt方法终止线程
使用interrupt方法来终端线程可分为两种情况:
(1)线程处于阻塞状态,如使用了sleep方法。
(2)使用while(!isInterrupted()){……}来判断线程是否被中断。
在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。下面的代码演示了在第一种情况下使用interrupt方法。
package chapter2;
public class ThreadInterrupt extends Thread
{
public void run()
{
try
{
sleep(50000); // 延迟50秒
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws Exception
{
Thread thread = new ThreadInterrupt();
thread.start();
System.out.println("在50秒之内按任意键中断线程!");
System.in.read();
thread.interrupt();
thread.join();
System.out.println("线程已经退出!");
}
}
上面代码的运行结果如下:
在50秒之内按任意键中断线程!
sleep interrupted
线程已经退出!
在调用interrupt方法后, sleep方法抛出异常,然后输出错误信息:sleep interrupted.
注意:在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法isInterrupted(),这两个方法的区别是interrupted用来判断当前线是否被中断,而isInterrupted可以用来判断其他线程是否被中断。因此,while (!isInterrupted())也可以换成while (!Thread.interrupted())。

阅读全文

与java多线程监听相关的资料

热点内容
天空网解压密码 浏览:583
拉萨网站布局该怎么设计 浏览:416
零售数据怎么用图来表示 浏览:628
英雄无敌7win1064位 浏览:951
宁波pm编程技能培训哪里便宜 浏览:779
国外疫情数据哪里准确 浏览:924
桌面上的部分文件不见了 浏览:453
win10ie主页改不过来 浏览:833
arccatalog添加数据库服务器 浏览:437
手机里如何找app 浏览:510
cmd转换文件夹 浏览:257
使命召唤9可以在win10上运行吗 浏览:383
网络盒子怎么收费 浏览:995
户户通没有网络怎么回事 浏览:78
个税原文件改名之后找不到了 浏览:824
文件另存为在一个地方却找不到了 浏览:502
记录每天走的里程下什么app 浏览:323
如何修改字幕文件 浏览:493
头条数据助手有什么用 浏览:423
logcat分析工具 浏览:236

友情链接