《零基礎學Java》 操作線程的方法 操作線程有很多方法,這些方法可以使線程從某一種狀態過渡到另一種狀態。 線程的休眠 能控制線程行為的方法之一是調用sleep()方法,sleep()方法可以指定線程休眠的時間,線程休眠的時間以毫秒為單位。 線程的休眠 實例: public class Demo2 ...
《零基礎學Java》
-
操作線程的方法
操作線程有很多方法,這些方法可以使線程從某一種狀態過渡到另一種狀態。
-
線程的休眠
能控制線程行為的方法之一是調用sleep()方法,sleep()方法可以指定線程休眠的時間,線程休眠的時間以毫秒為單位。
線程的休眠 實例:
public class Demo2 { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(i); try { Thread.sleep(200);// 線程休眠(單位:毫秒) } catch (InterruptedException e) { e.printStackTrace(); } } } }
-
線程的加入
假如當前程式為多線程程式,並且存在一個線程A,現在需要插入線程B,並要求線程B執行完畢後,再繼續執行線程A,此時可以使用 Thread類 中的 join()方法 來實現。當某個線程使用 join()方法 加入到另外一個線程時,另一個線程會等待該線程執行完畢後再繼續執行。
線程的加入 實例:
import javax.swing.*; import java.awt.*; public class Demo3 extends JFrame { private Thread threadA; private Thread threadB; final JProgressBar progressBar = new JProgressBar(); final JProgressBar progressBar2 = new JProgressBar(); public static void main(String[] args) { new Demo3(); } public Demo3(){ super(); setSize(100,100); setVisible(true); getContentPane().add(progressBar, BorderLayout.NORTH); getContentPane().add(progressBar2, BorderLayout.SOUTH); progressBar.setStringPainted(true); progressBar2.setStringPainted(true); threadA = new Thread(new Runnable() { int count=0; @Override public void run() { while (true){ progressBar.setValue(++count); try { Thread.sleep(100); if (count==20){ threadB.join();// 線程B加入到線程A中 } } catch (InterruptedException e) { e.printStackTrace(); } } } }); threadA.start(); threadB = new Thread(new Runnable() { int count=0; @Override public void run() { while (true){ progressBar2.setValue(++count); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if (count==100){ break; } } } }); threadB.start(); } }
-
線程的中斷
當線程使用了 sleep()方法 、wait()方法 進入了就緒狀態,可以使用 Thread類 中的 interrupt()方法 使線程離開 run()方法,同時結束線程。
線程的中斷 實例:
import javax.swing.*; import java.awt.*; public class Demo4 extends JFrame { Thread thread; public Demo4() { setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(200, 100); setVisible(true); final JProgressBar jProgressBar = new JProgressBar(); getContentPane().add(jProgressBar, BorderLayout.NORTH); jProgressBar.setStringPainted(true); thread = new Thread() { @Override public void run() { try { for (int i = 0; i < 100; i++) { jProgressBar.setValue(i); if (i == 50) { this.interrupt();// 中斷線程 } Thread.sleep(100); } } catch (InterruptedException e) { System.out.println("123"); } } }; thread.start(); } public static void main(String[] args) { new Demo4(); } }