㈠ 如何實現java線程的暫停和重新啟用
JAVA中線程開始有start方法,暫停用sleep(time)方法,線程停止用stop方法,線程等待wait方法,java 中沒有線程重啟一說,只能說線程喚醒()或是notify方法,前一個notifyAll()方法是喚醒所有的已休眠或是等待狀態下的線程。具體的一種參數請參照JDK文檔。
㈡ java中通過wait()和notify()實現線程暫停和重啟,問題如下,求高手幫忙
wait並不是調用的那個線程被阻塞,是誰調用,誰被阻塞。
下邊是例子
importjava.awt.BorderLayout;
importjava.awt.FlowLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
,Runnable{
privateTestThreadthread=null;
publicTestApp(){
JPanelbuttons=newJPanel();
FlowLayoutlayout=newFlowLayout(FlowLayout.CENTER);
buttons.setLayout(layout);
add(buttons,BorderLayout.NORTH);
JButtonbtn=newJButton("pause");
btn.addActionListener(this);
buttons.add(btn);
JLabellabel=newJLabel();
add(label,BorderLayout.CENTER);
setSize(800,600);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
thread=newTestThread(label);
thread.start();
}
publicstaticvoidmain(String[]args){
newTestApp();
}
publicvoidactionPerformed(ActionEvente){
JButtonbtn=(JButton)e.getSource();
if("pause".equals(btn.getText())){
btn.setText("start");
thread.callWait();
}else{
btn.setText("pause");
thread.call();
}
}
publicvoidrun(){
}
}
classTestThreadextendsThread{
privatebooleanisWait=false;
privateJLabellabe=null;
publicTestThread(JLabellabe){
this.labe=labe;
}
publicvoidrun(){
intindex=0;
while(true){
try{
if(isWait){
wait();
}
labe.setText(""+(++index));
sleep(500);
}catch(Exceptione){
}
}
}
(){
isWait=true;
}
publicsynchronizedvoidcall(){
isWait=false;
notify();
}
}
㈢ java 多線程 重啟
您好,線程停止了就結束了,所以你若想讓你一個線程停止了又能再重新開始,那隻能讓這個線程sleep。
如下一段代碼就可以實現你的需求了,希望你能看懂!!
package com.lxh.;
public class ThreadRestart extends Thread {
private static int i = 0;
@Override
public void run() {
while(true) {
// 這里用來判斷線程是否繼續停止,不執行代碼邏輯
if(i == 1) {
try {
sleep(100);
System.out.println("........");
continue;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 假設這是你線程中的一段邏輯
{
System.out.println("Happy Happy....");
}
}
}
public static void main(String[] args) throws Exception {
ThreadRestart threadTest = new ThreadRestart();
threadTest.start();
for (int j = 0; j < 20; j++) {
// 假設執行如下一段代碼邏輯時,讓線程threadTest執行
{
i = 0;
Thread.sleep(2000);
}
// 假設執行如下的一段代碼邏輯後,讓線程threadTest停止執行
{
i = 1;
Thread.sleep(2000);
}
}
// 退出整個程序
System.exit(0);
}
}
㈣ JAVA如何重新啟用一個線程
java實現多線程有2種方法:1擴展java.lang.Thread類;2實現java.lang.Runnable介面 下面舉個例子,實現Runnable,來實現多線程 public class DoSomething implements Runnable { //實現Runnable介面 public void run() { // 實現run方法 for (int i = 0; i < 5; i++) { // 重復5次 System.out.println("次線程do something"); try { Thread.sleep(1000); //休眠1秒 } catch (Exception e) {} } } public static void main(String[] args) { DoSomething dothing = new DoSomething(); Thread t1 = new Thread(dothing); t1.start(); //這里就是樓主提的問題,啟動線程,執行上面寫的run()方法 for (int i = 0; i < 5; i++) { //主線程 System.out.println("主線程do something"); try { Thread.sleep(1000); //休眠1秒 } catch (Exception e) {} } } }
㈤ java線程發生異常時怎麼重新啟動這個線程
for循環,try catch語句,在catch里截獲異常,判斷已經發生異常的次數,少於等於3遍,currentThread.interrupt() 大於3停止當前線程。
㈥ JAVA 線程重新啟動問題
這個run函數的主體是一個while循環,既然沒有break語句,那線程就不會結束。捕獲異常以後會繼續下一次循環。
更不需要start,因為已經start了。。。
㈦ JAVA中如何讓一個線程意外終止後重新啟動
新建一個線程,一直循環,每隔5分鍾調用那6個Tread的isAlive()方法進行判斷,如果返回為false則調用它們的start()方法。
㈧ 在java中什麼辦法可以讓線程停止然後再重新啟動它
1.你可以用布爾值來抄控制是否讓襲線程運行。例:while(boolean isLive){} 當isLive為true線程就運行,否則不運行。
2.你可以用對象。例:while(Object o != null)當對象存在的時候線程就運行,否則不運行!
3.你可以用wait()方法來讓線程等待,然後用notify()、notifyAll()在適當的時候喚醒線程、或者喚醒所有在些等待的線程!
例:一個挺不錯的例子---吃饅頭和做饅頭。
一個線程做饅頭,做好了放在籃子里(容量為10)。
一個線程吃饅頭,從籃子里拿饅頭吃(如果籃里有饅頭)。
還有一點就是為了看到明顯的等待效果,用一個隨機數來決定做和吃的速度。這樣就不會行成做一個,吃一個,籃子永遠裝不滿的不理想效果!(最好就是做稍快於吃)
這時,當籃子滿了,你就應該調用wait()方法來讓做的線程等待,讓吃的線程將籃子騰出空間放饅頭。同時,吃的線程也應該通知做的線程可以做饅頭了(就應該調用notify()來喚醒做的線程)。
這個例子應該就是你想要的「停止」後再重新啟動吧!
如果你說的是完全停止(死了),那就不行了!