导航:首页 > 编程语言 > java线程自动关闭

java线程自动关闭

发布时间:2021-12-07 11:17:08

java线程执行完后自己结束吗

其实最佳答案的说法抄是有问题的,如果题主指的结束,是指方法块语句的执行结束的话,热心网友的说法是对的。但是对于线程本身,所有线程(包括主线程)在启动后都被CPU参照优先级交替调用,运行的顺序是无法预测的,但最后结束的一定是主线程。
网上有部分说法,展示的代码运行结果,“主线程先于其他线程结束,并不影响其他线程的运行”只有后半部分是对的。因为方法体(不管是自定义线程的run()还是主线程的main())中全部语句的执行完毕不代表所在线程的结束,可以用activeCount()返回当前运行的总线程数来验证这一点。另外,如果将自定义的线程对象设定为守护线程(setDeamon()),也可以很清楚看到即便main()方法中最后一句输出语句执行完毕,控制台仍会根据该自定义线程run()方法体的内容继续输出,这证明主线程还没结束——因为当线程组中只剩下守护线程时,JVM虚拟机会自动退出,如果主线程已经结束,唯一活动的线程在被设置成守护线程的情况下,程序会直接结束运行,不可能继续输出。

② java多线程,怎么让一个线程中断并关闭

boolean变量不适合你的需要。
你应把加载音乐的责任交给AudioClip来完成,其实就是它自己去加载音乐,这样方便管理。

public class AudioClip {
private Thread thread = null;

public synchronized void load(String url) {
if (thread != null) {
throw new IllegalStateException();
}
thread = new AudioClipLoader(url);
thread.start();
}

public void shutdown() {
Thread snapshot;
synchronized (this) {
snapshot = thread;
thread = null;
this.notifyAll();
}
if (snapshot != null) {
snapshot.interrupt();
}

}

private class AudioClipLoader extends Thread {
private String url;

public AudioClipLoader(String url) {
this.url = url;
}

@Override
public void run() {
while (true) {
Thread me = Thread.currentThread();
if (me != thread) {
break;
}
System.out.println("正在加载" + url + " ...");
try {
Thread.sleep(90 * 1000 * 60);
} catch (Exception ex) {
synchronized (AudioClip.this) {
me = Thread.currentThread();
if (me != thread) {// close by AudioClip
System.out.println("Shutdown by AudioClip!");
break;
}
// network connection exception
throw new RuntimeException(ex);
}
}
}
}
}

public static void main(String[] args) throws Exception {
AudioClip audioClip = new AudioClip();
audioClip.load("http://java.sun.com/");
Thread.sleep(5000);
audioClip.shutdown();

}

}

③ java多线程时程序运行完成为什么不会自动关闭退出

具体演示如下:

[java] view plain
package test;
public class TestShutDownHook {
public TestShutDownHook() {
doShutDownWork();
}
private void doShutDownWork() {
Runtime run=Runtime.getRuntime();//当前 Java 应用程序相关的运行时对象。
run.addShutdownHook(new Thread(){ //注册新的虚拟机来关闭钩子
@
public void run() {
//程序结束时进行的操作
System.out.println("程序结束调用");
}
});
}
public static void main(String[] args) {
new TestShutDownHook();
for (int i = 0; i < 1000; i++) { // 在这里增添您需要处理代码 }
System.out.println(i);
}
}
}
在上述程序中,我们可以看到通过在程序中增加Runtime.getRuntime().addShutdownHook(new Thread()) 事件监听,捕获系统退出消息到来,然后,执行我们所需要完成工作,从而使我们的程序更健壮!

望采纳,谢谢。

④ 请教java线程池没有运行完就自动退出了,我也没有去关闭。。

线程的调度和使用方式没有任何问题,Thread.sleep(2*1000);也没有任何必要,因为这样写阻塞的只是主线程内。
问题应该是处在AxsInfoThread类中容,是不是这个类的run方法中的任务已经执行完了,或者其内部又开启了新线程。

⑤ java 中如何使线程运行一定时间后停止

使用计时器Timer,可以实现,在计时器中设定时间,到达后关闭计时器,退出线程就行了。
import
java.awt.*;
import
java.awt.event.*;
import
javax.swing.Timer;
class
tt
implements
ActionListener{
ttt
t;
Timer
time;
public
tt(ttt
t){
this.t=t;
time=new
Timer(1000,this);
time.setRepeats(false);
}
public
void
actionPerformed(ActionEvent
e){
time.stop();
}
}
class
ttt
extends
Thread{
tt
temp;
int
i=0;
public
ttt(){
temp=new
tt(this);
}
public
void
run(){
temp.time.start();
while(i<10000){
System.out.print(i+"
");
i++;
if(!temp.time.isRunning()){
System.out.println("End");
return;
}
}
}
}
public
class
time
{
public
static
void
main(String
args[]){
ttt
tttt=new
ttt();
tttt.start();
}
}
这个是我做的,打印1-10000,如果时间超过1秒,剩下的就不打印,退出时由于线程排队,需要等一下才能结束打印(注意每次打印的数可能不一样多)。。。

阅读全文

与java线程自动关闭相关的资料

热点内容
李彩谭最新电影 浏览:226
尹雪熙的电影有什么 浏览:229
一个电视剧男主角叫蛋蛋 浏览:561
能看的网址在线 浏览:393
电影不卡网 浏览:977
书包文学网txt 浏览:558
李采潭演的老师叫什么名字电影 浏览:242
主角叫凌天的都市文 浏览:863
沈阳市光陆影城中街店影讯 浏览:108
电影院专场电影在哪查询 浏览:175
男主叫凌天的现代小说 浏览:376
文化资源大数据应用论文 浏览:584
韩剧电影在线观看免费完整 浏览:323
韩国吻戏比较多的电影有哪些 浏览:45
联想电脑可以跟ipad同步文件吗 浏览:50
单立文和翁虹演的电影 浏览:477
龙 奇幻电影 浏览:82
台湾电影除了性你 浏览:74
最新的泰国恐怖电影里面的人变丧尸 浏览:140
大数据可视化市场容量 浏览:962

友情链接