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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java的知识点25——程序、进程与线程 || 线程的创建和启动

發布時間:2025/4/16 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去調用)

/*** 創建線程方式一:* 1. 創建:繼承Thread+重寫run* 2. 啟動:創建子類對象+start()方法* @author Administrator**/ public class StartThread extends Thread{//線程入口點public void run() {super.run();for(int i=0;i<20;i++) {System.out.println("一邊聽歌");}}public static void main(String[] args) {//創建子類對象StartThread st=new StartThread();//啟動線程st.start(); // st.run(); //普通方法的調用for(int i=0;i<20;i++) {System.out.println("一邊coding");}} }

?


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接口:避免單繼承的局限性,優先使用接口
?* 優點:方便共享資源

/*** 創建線程方式二:* 1. 創建:實現Runnable+重寫run* 2. 啟動:創建實現類對象+Thread對象+start()方法* @author Administrator**/ public class StartRun implements Runnable{//線程入口點public void run() {for(int i=0;i<20;i++) {System.out.println("一邊聽歌");}}public static void main(String[] args) { // //創建實現類對象 // StartRun sr=new StartRun(); // //創建代理類對象 // Thread t=new Thread(sr); // //啟動 // t.start();new Thread(new StartRun()).start();for(int i=0;i<20;i++) {System.out.println("一邊coding");}} }

?


采用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——程序、进程与线程 || 线程的创建和启动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。