java两个线程同时运行_java如何几乎同时结束两个线程
今天寫了一個讓文字何背景音樂幾乎同時開始幾乎同時結束的小程序,但是遇到了一個問題,就是如何同時結束兩個線程的問題
我想到的第一種方式,因為只有兩個線程可以直接終止;System.exit(0);
第二種方式; 如果不能正常開啟音樂播放t線程t線程就結束了,使用靜態屬性,打boolean的方式,終止音樂播放程序但是沒有辦法立即停止while (flag) { //沒有辦法立即停止;
try {
//將音樂文件放到play;
Player player = new Player(new FileInputStream((new File(path))));
player.play(); //播放音樂;
} catch (JavaLayerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
以下為源碼
讀取文件import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;
/*
* runtime 類構造方法私有;--->單例模式;
* * */public class showLove {
public static boolean falg=true;
public static void main(String[] args) throws IOException {
// 使用了單例模式; 使用Runtime 中自帶的exec 方法,以command 命令的方式打開window下的程序
Runtime rt=Runtime.getRuntime();
rt.exec("notepad");
Thread t=new Thread( ()->{
Musicutil.play("C:Users86152Musicやなぎなぎ - ユキトキ (雪融) (TV Size).mp3");
// 單線程要一行一行的執行,所以如果為單線程,就會播放音樂完成后再播放音樂;
});
t.start(); //開啟音樂線程;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 讀取文件;
readFile("C:Users86152Desktopjava練習content.txt");
// 強行終止進程以達到結束兩個線程的;
}
// 判斷主線程是否執行完畢;
public static boolean judgeOfThread(){
return true;
}
/**
* 讀取文件
* @param path //文件的路徑
*/
public static void readFile(String path){
// 自動關閉try with resources; JDK1.7新特性
try( FileReader fr=new FileReader(path)){
int c;
while( (c=fr.read()) !=-1){
//將讀取的部分轉化為字符串;
copyAndPaste(String.valueOf((char) c));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 將數據粘貼到文件中;
* @param str
*/
public static void copyAndPaste(String str){
//創建StringSelection對象,將str() 放入;
StringSelection stringSelection=new StringSelection(str);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection,stringSelection);
// ctrl V;---.模擬ctrl v 的執行;
Robot robot=null;
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
// 兩個鍵的按下;
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
//鍵盤的松開;
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
// 隨機的delay() 延遲;
Random random=new Random();
int delay= random.nextInt(600); //隨機數的邊界
if(delay<100){
delay+=200;
}
robot.delay(delay); //單位為毫秒;
}
}
播放音樂 ,使用了外接jar包import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* 播放音樂
* */
public class Musicutil{
public static void play(String path) {
//player是一個流對象;
while (true) { //沒有辦法立即停止;
try {
//將音樂文件放到play;
Player player = new Player(new FileInputStream((new File(path))));
player.play(); //播放音樂;
} catch (JavaLayerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
想問問有更好的解決方案嗎 .interrput() 方法在這好像不好使用,希望大神們給我提出更好的解決方案;
總結
以上是生活随笔為你收集整理的java两个线程同时运行_java如何几乎同时结束两个线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 根据ip获取mac地址_利用j
- 下一篇: java封装对象实体类_Java 接口自