日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java两个线程同时运行_java如何几乎同时结束两个线程

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java两个线程同时运行_java如何几乎同时结束两个线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天寫了一個讓文字何背景音樂幾乎同時開始幾乎同時結(jié)束的小程序,但是遇到了一個問題,就是如何同時結(jié)束兩個線程的問題

我想到的第一種方式,因?yàn)橹挥袃蓚€線程可以直接終止;System.exit(0);

第二種方式; 如果不能正常開啟音樂播放t線程t線程就結(jié)束了,使用靜態(tài)屬性,打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 類構(gòu)造方法私有;--->單例模式;

* * */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");

// 單線程要一行一行的執(zhí)行,所以如果為單線程,就會播放音樂完成后再播放音樂;

});

t.start(); //開啟音樂線程;

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// 讀取文件;

readFile("C:Users86152Desktopjava練習(xí)content.txt");

// 強(qiáng)行終止進(jìn)程以達(dá)到結(jié)束兩個線程的;

}

// 判斷主線程是否執(zhí)行完畢;

public static boolean judgeOfThread(){

return true;

}

/**

* 讀取文件

* @param path //文件的路徑

*/

public static void readFile(String path){

// 自動關(guān)閉try with resources; JDK1.7新特性

try( FileReader fr=new FileReader(path)){

int c;

while( (c=fr.read()) !=-1){

//將讀取的部分轉(zhuǎn)化為字符串;

copyAndPaste(String.valueOf((char) c));

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 將數(shù)據(jù)粘貼到文件中;

* @param str

*/

public static void copyAndPaste(String str){

//創(chuàng)建StringSelection對象,將str() 放入;

StringSelection stringSelection=new StringSelection(str);

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection,stringSelection);

// ctrl V;---.模擬ctrl v 的執(zhí)行;

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);

// 隨機(jī)的delay() 延遲;

Random random=new Random();

int delay= random.nextInt(600); //隨機(jī)數(shù)的邊界

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() 方法在這好像不好使用,希望大神們給我提出更好的解決方案;

總結(jié)

以上是生活随笔為你收集整理的java两个线程同时运行_java如何几乎同时结束两个线程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。