java怎么结束线程(Java线程等待)

  • 时间:
  • 浏览:36
  • 来源:java教程网
内容导航
10条解答


1.如何终止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秒之内按任意键中断线程!
);
.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 。


2.java中多线程问题,如何结束一个线程???

使用方法 Thread thread = new Thread();
... ... thread.stop();
//已过时 thread.interrupt();
//中断线。


3.如何将JAVA线程停止!!

你2个button中 监听的 线程 不是一个线程 ,当然停止不。
我帮你改下 如下: import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
public class DynamicTextLabel extends JFrame{ //声明一个线程 Thread 为了2个button监听获得同一个线程 private Thread t;
private static final long serialVersionUID = -2035256617544621708L;
private JPanel contentPane;
private JLabel label;
private JButton btnNewButton_1;
public static void main(String args) { try { UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel);
} catch (Throwable e) { e.printStackTrace();
} EventQueue.invokeLater(new Runnable() { public void run() { try { DynamicTextLabel frame = new DynamicTextLabel();
frame.setVisible(true);
} catch (Exception e) { e.printStackTrace();
} } });
} public DynamicTextLabel() { setTitle(文字的跑马灯效果);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds
(100, 100, 400, 149);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder
(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
label = new JLabel(明日科技);
label.setBounds
(10, 10, 48, 15);
contentPane.add(label);
JButton btnNewButton = new JButton(||);
btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //停止前面new的线程,对象的引用相同 if(t!
=null){ t.stop();
} } });
btnNewButton.setBounds
(59, 64, 93, 23);
contentPane.add(btnNewButton);
btnNewButton_1 = new JButton(u2192);
btnNewButton_
1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //产生一个线程 t= new Thread(new DynamicThread());
t.start();
} });
btnNewButton_
1.setBounds
(183, 64, 93, 23);
contentPane.add(btnNewButton_1);
} private class DynamicThread implements Runnable { @Override public void run() { while (true) { for (int i = 0;
i 400;
i ) { try { Thread.sleep
(10);
} catch (InterruptedException e) { e.printStackTrace();
} label.setLocation(i, 5);
} } } }。


4.java多线程中如何有效的停止当前线。

中断(Interrupt 一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其当前的操。
线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程。
虽然初次看来它可能显得简单,但是,你必须进行一些预警以实现期望的结。
你最好还是牢记以下的告。
首先,忘掉Thread.stop方。
虽然它确实停止了一个正在运行的线程,然而,这种方法是不安全也是不受提倡的,这意味着,在未来的JAVA版本中,它将不复存。
中断线程最好的,最受推荐的方式是,使用共享变量(shared variable 发出信号,告诉线程必须停止正在运行的任。
线程必须周期性的核查这一变量(尤其在冗余操作期间 ,然后有秩序地中止任。


5.java如何停止线程,如何停止一个正在运行的线程,不是循环的那种,只是一次执行的线程

线程执行完了就自动结束了,如果是想中断可以使用Object的wait方法等待,然后notif。


6.java怎么停止已经启动的线程

在前面定义一个整形:int count =0;
在while里面 int count =0;
boolean b =true;
while(b){ count ;
if(count==10){ //当循环10次后退出线程 b=false;
} //你的执行代码 。


7.在java中如何中止一个线程?

你那个线程是否在睡觉呢?
(调用了sleep() 等它醒来要让它检查一下是否被人给interupt了 调用isInterupted()就行了,这样才能将它停掉 你也可以在一个方法内部将它停掉: class Cat{ synchronized syn_method(){ //do something;
this.wait();
} ..... public void run(){ a_cat.syn_method();
} 然后再用a_cat的另一个引用: a_cat.notifyAll();
将它唤醒 或者不唤醒,让它停掉 或者这样: boolean toStop=false;
.... public void run(){ while(!
toStop){ //do something } } .... toStop=true;
就将它停了;


8.JAVA如何停止一个运行着的指定线程

楼主, 你虽然有很多个任务相同的线程,但其实这N个线程并不是同一个对象, 就好像, 人是一个类,有湖南,湖北,广东,广西人, 每个人都有一个身份标。
你把湖南人的标志改了并不会影响到湖北人!
虽然他们都在同一个工地上干同样的活,虽然它们都是妈生的 所以本例中,N多个线程对象生成,并启动后一个一个都是单独的对象,在单独的运行空间里。
表面上看起来是相同的任务,其实是不相同的 boolean runflag=true;
这个标志每个对象都有一个,你改变了其中一个以后,其它线程并不会受到影响;
那么如果我就是想达到改变一次就能停止所有线程呢?
方法是将runflag给设成static即 public static runflag=true;
这样这个runflag只会生成一。
改变一次就会影响全部对。
就好像,湖南湖北人都只有一个祖国, 国家富强了,所有人都受益 如果要用id来管理线程也是可以的,用Hashtable来存储线程,Hashtable需要一个主键key,你在线程对象内生成一个不可能重复id传给它做主键就行。
但即使这样,也不要随便使用sun不推荐使用的stop 方法停止线程,这样会造成很多不可预料的后。
而还是应该使用改变runflag的形式 即: myThread mt=(myThread)hashtable.get(id);
mt.runflag=false;
希望对你有所帮。


9.如何在JAVA中让一个线程死亡或结束

当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执。
线程进入死亡状态的方法有两种:
1、自然终止:正常运行run()方法后终止;

2、异常终止:调用stop()方法让一个线程终止运。
如下代码: public class ThreadDemo implements Runnable{ public void run() { } } 当run方法执行结束,即线程死亡(结束。


10.java怎么获得线程结束通知

那是你自己定义的,如下,那个XXX就是你想要结束时的状况 @Override public?
void?
run()?
{ while?
(true)?
{ try?
{ Thread.sleep
(1000);
if(xxx){ break;
} }?
catch?
(InterruptedException?
e)?
{ e.printStackTrace();
} } 。

猜你喜欢

java怎么解密md5

问答列表1.JavaMD5如何解密2.java中如何进行md5加密3.java怎么把字符串进行md5加密4.求Java的MD5加密解密实现类。要实现对用户的密码进行加密!然后验

2021-04-16

Java怎么用io流(Java web)

问答列表1.javaio流的典型使用方式有几种2.java中怎样用IO流把一个文件全部读取出来3.java中的io流,怎么运行4.java中什么是IO流5.求解:JAVA中怎么

2021-04-16

Java怎么打印到界面(网页打印不了怎么设置)

问答列表1.java怎么打印出JFrame界面就是我写出一个界面,现在想把它打印出来怎么写代码2.java里如何用输出窗口打印内容3.java调用打印机,把GUI界面里的内容打

2021-04-16

怎么查询java版本(java哪个版本好)

问答列表1.怎么查看java的版本号2.如何查看jdk版本3.怎么查看JAVAJDK版本4.如何看本机JDK详细版本5.如何查看jdk的版本是32位还是64位6.如何查看ecl

2021-04-16

怎么高并发 java(java高并发原理)

问答列表1.java怎样处理高并发2.java中怎么实现高并发3.java如何处理高并发4.java高并发,如何解决,什么方式解决,高并发5.JAVA中怎么处理高并发的情况6.

2021-04-16