Java并發學習之一——線程的創建

與每個java語言中的元素一樣,線程是對象。在Java中,我們有兩種方式創建線程:

1、通過直接繼承thread類,然后覆蓋run方法。

2、構建一個實現Runnable接口的類,然后創建一個thread類對象并傳遞Runnable對象作為構造參數

代碼如下:

public class Calculator implements Runnable{  private int number;  public Calculator(int number){  this.number = number;  }  /** * run()方法是創建的線程執行指令 */  @Override  public void run() {  for (int i = 1; i < 10; i++) {  System.out.printf("%s:%d*%d=%d\n",Thread.currentThread().getName(),number,i,i*number);  }  }  public static void main(String[] args) {  for (int i = 1; i < 10; i++) {  Calculator cal = new Calculator(i);  Thread thread = new Thread(cal);  thread.start();  }  }  
}  

3、每個Java程序最少有一個執行線程。當你運行程序的時候,JVM運行負責調用main()方法的執行線程。當調用Thread對象的start()方法時,我們創建了另一個執行線程。在這些start()方法調用之后,我們的程序就有了多個執行線程。當全部的線程執行結束時(更具體點,所有非守護線程結束時),Java程序就結束了。如果初始線程(執行main()方法的主線程)運行結束,其他的線程還是會繼續執行直到執行完成。但是如果某個線程調用System.exit()指示終結程序,那么全部的線程都會結束執行。創建一個Thread類的對象不會創建新的執行線程。同樣,調用實現Runnable接口的run()方法也不會創建一個新的執行線程。只有調用start()方法才能創建一個新的執行線程。

4.特殊建立一個線程代碼如下(常用)

package aliPay;import org.omg.CORBA.PRIVATE_MEMBER;public class troduationalThread {public static void main(String[] args) {// TODO Auto-generated method stubfinal Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubfor (int i = 0; i < 50; i++) {business.sub(i);                            }}}).start();for (int i = 0; i < 50; i++) {business.sub(i);            business.main(i);}}}class Business{private boolean isShouldSub = true;public synchronized void sub(int i) { while (!isShouldSub) {try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}for(int j=1;j<=10;j++){System.out.println("Sub Thread sequence of"+j+"loop of"+i);}isShouldSub = false;this.notify();}public synchronized void main(int i){while (isShouldSub) {try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}for(int j=1;j<=10;j++){System.out.println("Main Thread sequence of"+j+"loop of"+i);}isShouldSub = true;this.notify();}}

?

轉載于:https://www.cnblogs.com/pypua/articles/7233929.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252232.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

day1||python

測試題&#xff1a; 0. Python 是什么類型的語言&#xff1f; Python是一種面向對象、解釋型、動態類型計算機程序設計語言解釋型&#xff1a;程序無需編譯成二進制代碼&#xff0c;而是在執行時對語句一條一條編譯動態類型&#xff1a;在程序執行過程中&#xff0c;可以改變變…

2.7萬字還原行業面貌,《2019 AI金融風控行業研究報告》正式上線!...

在金融科技領域&#xff0c;風險控制的重要性&#xff0c;從其關聯的金融業務和結合的技術維度可見一斑&#xff1a;風控涉及信用借貸、保險、支付、供應鏈金融等場景&#xff0c;并運用了包括生物特征識別、機器學習、自然語言處理、大數據、云計算等多項技術。 區別于美國有…

【原創】QT簡單計算器

代碼 //main.cpp#include "calculator_111.h" #include <QtWidgets/QApplication>int main(int argc, char *argv[]) { QApplication a(argc, argv); Calculator_111 w; w.show(); return a.exec(); /* //QT creator Calculator_111 win; win.show(); return…

cs堡壘機使用說明

一、堡壘機介紹 為了保證機房的網絡安全&#xff0c;IDC內所有服務器不被允許從辦公網直接ssh登錄&#xff0c;必須通過跳板機進行間接登錄。用戶通過跳板機執行的所有命令&#xff08;包括通過跳板機登錄的其他機器后的命令&#xff09;都會被保存并審計。 cs是我們登錄IDC服…

export和export default的區別

es6中export和export default的區別 export與export default均可用于導出常量、函數、文件、模塊&#xff1b;你可以在其它文件或模塊中通過import(常量 | 函數 | 文件 | 模塊)名的方式&#xff0c;將其導入&#xff0c;以便能夠對其進行使用&#xff1b;在一個文件或模塊中&am…

koa中間件機制詳解

轉自&#xff1a;https://cnodejs.org/topic/58fd8ec7523b9d0956dad945 koa是由express原班人馬打造的一個更小、更富有表現力、更健壯的web框架。 在我眼中&#xff0c;koa的確是比express輕量的多&#xff0c;koa給我的感覺更像是一個中間件框架&#xff0c;koa只是一個基礎的…

極度推薦的文章和網站

推薦文章---收錄中 因為是及時雨,這里就給他放在開頭啦&#xff1a;http://www.cnblogs.com/zhuzhenwei918/p/7241971.html webpack3.0配置指南&#xff1a;http://www.cnblogs.com/caideyipi/articles/7080010.html 超酷的偽元素網站&#xff1a;https://tympanus.net/Develop…

倍道而行:選擇排序

一、為什么學了之后過段時間又會忘記了&#xff1f; 因為沒有去運用它和認為面試需要而沒有真正的重視。現在給它賦予意義&#xff1a;1.那就是基礎牢固&#xff0c;才可觸類旁通2.真正記得和隨時可以拿出手&#xff0c;那么面試可以PK掉一大批人。不然看到一個精妙的算法就學一…

如何構建一個真實的推薦系統?

AI 前線導讀&#xff1a;隨著互聯網行業的井噴式發展&#xff0c;數據規模呈現爆炸式增長。大數據中蘊含了巨大的價值&#xff0c;但同時也來了很 “信息過載” 的問題。推薦系統作為一個廣泛應用的信息過濾系統&#xff0c;在很多領域取得了巨大的成功。在電子商務上&#xff…

volatile的適用場景

介紹 把代碼塊聲明為 synchronized&#xff0c;有兩個重要后果&#xff0c;通常是指該代碼具有 原子性&#xff08;atomicity&#xff09;和 可見性&#xff08;visibility&#xff09;。 原子性意味著個時刻&#xff0c;只有一個線程能夠執行一段代碼&#xff0c;這段代碼通過…

link和@import的區別

1、link屬于HTML標簽&#xff0c;import是css提供的 2、link是HTML標簽&#xff0c;沒有兼容問題&#xff0c;而import只在IE5以上才能識別 3、頁面被加載時&#xff0c;link會同時被加載&#xff0c;而import引用的css會等到頁面加載完再加載 4、link方式的樣式的權重高于impo…

6.java 代碼塊

代碼塊 在java中用{}括起來的稱為代碼塊&#xff0c;代碼塊可分為以下四種: 普通代碼塊構造代碼塊靜態代碼塊同步代碼塊普通代碼塊 在方法或語句中出現的{}就稱為普通代碼塊。普通代碼塊和一般語句的執行順序由他們在代碼中出現的次序決定&#xff0c;先出現先執行。 普通代碼塊…

C#如何測試代碼運行時間

第一種方式&#xff1a;System.Diagnostics.Stopwatch stopwatch new Stopwatch(); stopwatch.Start(); // 開始監視代碼運行時間 // 需要測試的代碼 .... stopwatch.Stop(); // 停止監視 TimeSpan timespan stopwatch.Elapsed; // 獲取當前實例測量得出的總時間 double …

0074 幾道面試題

昨天參加了惠裝網的面試&#xff0c;有些題不會做的&#xff0c;記錄下來 switch語句能否作用在byte、long、String上 Java1.7以前&#xff1a;byte、short、int、char Java1.7開始&#xff1a;新增String 因此switch語句不能作用在long上&#xff0c;看下面代碼&#xff1a; p…

SpringBoot入門之內嵌Tomcat配置

spring boot默認web程序啟用tomcat內嵌容器tomcat&#xff0c;監聽8080端口,servletPath默認為 / 。需要用到的就是端口、上下文路徑的修改&#xff0c;在spring boot中其修改方法極其簡單&#xff0c;實例如下&#xff1a; server.port8088 server.context-path/test 啟動程序…

第二十二章:動畫(六)

復合動畫您可以混合等待和未等待的調用來創建復合動畫。 例如&#xff0c;假設您希望按鈕在大小擴展的同時旋轉360度然后收縮。ViewExtensions類定義一個方法名稱ScaleTo&#xff0c;它為Scale屬性設置動畫&#xff0c;就像RotateTo為Rotate屬性設置動畫一樣。 Button大小的擴展…

C#操作Excel總結

0. 導入命名空間&#xff1a; 1234using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;using System.IO;using System.Reflection;1. 如何打開已有excel文檔&#xff0c;或者創建一個新的excel文檔 123Application app new Application();Workbooks wbks app…

Ubuntu16.04用源安裝Nginx+PHP5.6+MySQL5.6

安裝Nginx 1、首先添加nginx_signing.key(必須&#xff0c;否則出錯) $ wget http://nginx.org/keys/nginx_signing.key$ sudo apt-key add nginx_signing.key 2、添加]Nginx](http://nginx.org/)官方提供的源 $ echo "deb http://nginx.org/packages/ubuntu/ trusty ngin…

leetcode -39組合總數

搜就完事了&#xff0c;沒想著優化。唉~太菜&#xff0c;給一個位置標記位置&#xff0c;然后通過該位置向該位置及該位置以下尋找&#xff0c;這樣不存在什么重復回去查找問題。 如果總結大于目標值&#xff0c;回溯一下&#xff0c;如果不大于繼續。 class Solution { public…

避免某個子窗體重復運行的方法(showdialog、show)

在C#中窗口的顯示有兩種方式&#xff1a;模態顯示&#xff08;showdialog&#xff09;和非模態顯示&#xff08;show&#xff09;。 二者最常見的區別是&#xff1a;模態顯示后&#xff0c;彈出窗口阻止調用窗口的所有消息響應。只有在彈出窗口結束后調用窗口才能繼續。在模態窗…