1. 程式人生 > >TreadAPP-使用線程下載文件

TreadAPP-使用線程下載文件

implement 產生 span random rgs create cat static成員 exc

package main;

/**
* Created by lxj-pc on 2017/6/27.
*/
public class TreadApp {//volatile 線程間共享變量

private static volatile boolean isExit=false;//static成員不能訪問非static成員


public static void main(String[] args) {
//下載一個文件 啟動線程 ,線程池使用,
//啟動線程 下載文件 1.線程自己實現方法
//多行註釋 shift+Ctrl+/
/* 1. new DownloadTread ("file1").start();

new DownloadTread ("file2").start();
new DownloadTread ("file3").start();
new DownloadTread ("file4").start();*/

/* 2. new Thread((new DownloadTask("file1"))).start();
new Thread((new DownloadTask("file2"))).start();
new Thread((new DownloadTask("file3"))).start();

new Thread((new DownloadTask("file4"))).start();
new Thread((new DownloadTask("file5"))).start();*/

new Thread((new DownloadTask("file1"))).start();
//主線程休眠2s 執行退出
try {
Thread.sleep(Long.parseLong("2000"));
} catch (InterruptedException e) {
e.printStackTrace();

}





//打印主線程ID
System.out.println("當前主線程ID:"+Thread.currentThread().getId());

isExit=true;




// 4. new Thread(){//可以Thread直接調用
// @Override
// public void run() {
// super.run();
// }}.start();

}






static class DownloadTask implements Runnable{
private String url;
private int currentThreadId=-1;
public DownloadTask(String url){
this.url=url;

}


@Override
public void run() {
//獲取當前線程的ID
// Thread.currentThread().getId()
currentThreadId = (int) Thread.currentThread().getId();

System.out.println("下載..."+url+",線程ID:"+currentThreadId+"開始");



//隨機產生5-10s
int s= (int) (Math.random()*6+5); // [5,10]
for (int i = 0; i <s ; i++) {
try {
Thread.sleep(Long.parseLong("1000"));
} catch (InterruptedException e) {
e.printStackTrace();
}
if(isExit)
return;
System.out.println(currentThreadId+"已用.."+i+ "秒");
}

System.out.println(currentThreadId+"下載完成"+url);
}
}



//類的成員內部類
static class DownloadTread extends Thread {

private String url;//文件路徑

public DownloadTread(String url) {

this.url = url;

}

public void run() {
super.run();//無功能 無作用
//實現下載文件代碼
// Thread.getId() 線程裏的唯一標識
System.out.println("正在下載文件" + url + "線程id:" + getId());
int ms = (int) (Math.random() * 11 + 2) * 1000;//2-12毫秒

System.out.println(url + "計劃完成時間" + ms / 1000 + " 秒");
try {
sleep(ms);//線程休眠
} catch (InterruptedException e) {
e.printStackTrace();
}


System.out.println(url + "文件已經下載完成!");
}

}

}

TreadAPP-使用線程下載文件