Java的知识点25——程序、进程与线程 || 线程的创建和启动
生活随笔
收集整理的這篇文章主要介紹了
Java的知识点25——程序、进程与线程 || 线程的创建和启动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序、進程與線程
進程的特點:動態性、并發性、獨立性
并發和并行的區別
并發:多個CPU同時執行多個任務
并行:一個CPU(采用時間片)同時執行多個任務
?
?
注:很多多線程是模擬出來的,真正的多線程是指有多個cpu,即多核,如服務器。如果是模擬出來的多線程,即在一個cpu的情況下,在同一個時間點,cpu只能執行一個代碼,因為線程之間切換很快,所以就有同時執行的錯覺。
線程的創建和啟動
線程的創建
? 方式1:繼承Java.lang.Thread類,并覆蓋run() 方法
? 方式2:實現Java.lang.Runnable接口,并實現run() 方法
? 方式3:實現callable接口
注:run( )稱為線程體
創建線程方式一:
?* 1. 創建:繼承Thread+重寫run
?* 2. 啟動:創建子類對象+start()方法(不保證立即運行? 由cpu去調用)
?
WebDownloader.java
/*** 下載圖片 * @author Administrator**/ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL;import org.apache.commons.io.FileUtils;public class WebDownloader {/*** 下載* @param url* @param name*/public void download(String url,String name) {try {FileUtils.copyURLToFile(new URL(url), new File(name));} catch (MalformedURLException e) {e.printStackTrace();System.out.println("不合法的url");} catch (IOException e) {e.printStackTrace();System.out.println("下載失敗"); }} }TDownloader.java
public class TDownloader extends Thread {private String url; //遠程路徑private String name; // 存儲名字public TDownloader(String url, String name) {super();this.url = url;this.name = name;}@Overridepublic void run() { super.run();WebDownloader wd= new WebDownloader();wd.download(url, name);System.out.println(name);}public static void main(String[] args) {TDownloader td1=new TDownloader("http://img4.3lian.com/sucai/img3/399/01+.jpg", "1.jpg");TDownloader td2=new TDownloader("http://img4.3lian.com/sucai/img3/399/10+.jpg", "2.jpg");TDownloader td3=new TDownloader("http://img4.3lian.com/sucai/img3/399/15+.jpg", "3.jpg");//啟動三個線程td1.start();td2.start();td3.start();} }? 注:必須在工程目錄下,導入此文件
創建線程方式二:
?* 1. 創建:實現Runnable+重寫run
?* 2. 啟動:創建實現類對象+Thread對象+start()方法
推薦使用Runnable接口:避免單繼承的局限性,優先使用接口
?* 優點:方便共享資源
?
采用Runnable接口,對TDownloader.java 進行修改為IDownloader.java? ?實現上面的效果
public class IDownloader implements Runnable{private String url; //遠程路徑private String name; // 存儲名字public IDownloader(String url, String name) {super();this.url = url;this.name = name;}@Overridepublic void run() { WebDownloader wd= new WebDownloader();wd.download(url, name);System.out.println(name);}public static void main(String[] args) {IDownloader td1=new IDownloader("http://img4.3lian.com/sucai/img3/399/01+.jpg", "1.jpg");IDownloader td2=new IDownloader("http://img4.3lian.com/sucai/img3/399/10+.jpg", "2.jpg");IDownloader td3=new IDownloader("http://img4.3lian.com/sucai/img3/399/15+.jpg", "3.jpg");//啟動三個線程new Thread(td1).start();new Thread(td2).start();new Thread(td3).start();} }?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Java的知识点25——程序、进程与线程 || 线程的创建和启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库知识点1
- 下一篇: 数据库知识点2——关系模型之基本概念