Java中創建線程的兩種方式

来源:http://www.cnblogs.com/tzc1024/archive/2016/10/27/6005580.html
-Advertisement-
Play Games

創建線程的第一種方式: 這種方式的特點(缺陷):線程任務和線程是綁定在一起的。 示例: 四個視窗同時賣票 因為是同時,所以使用多線程。 創建四個線程,都是賣票。 因為都是賣票,所以四個線程的任務是一樣的。 只需要定義一個類繼承Thread。 為瞭解決四個線程共用票的問題,需要使用創建線程的第二種方式 ...


創建線程的第一種方式:

  1. 創建一個類繼承Thread
  2. 重寫Thread中的run方法 (創建線程是為了執行任務 任務代碼必須有存儲位置,run方法就是任務代碼的存儲位置。)
  3. 創建子類對象,其實就是在創建線程
  4. 啟動線程start()

這種方式的特點(缺陷):線程任務和線程是綁定在一起的。

示例:

四個視窗同時賣票,

因為是同時,所以使用多線程。

創建四個線程,都是賣票。

因為都是賣票,所以四個線程的任務是一樣的。

只需要定義一個類繼承Thread。

 1 class Ticket extends Thread
 2 {
 3     private static int num = 50; //定義成static,四個線程共用50張票。
 4     public void run()
 5     {
 6         while(num>0)
 7         System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
 8     }
 9 }
10 
11 class Maipiao
12 {
13     public static void main(String[] args) 
14     {
15         Ticket win1 = new Ticket();
16         Ticket win2 = new Ticket();
17         Ticket win3 = new Ticket();
18         Ticket win4 = new Ticket();
19 
20         win1.start();
21         win2.start();
22         win3.start();
23         win4.start();
24     }
25 }

 

為瞭解決四個線程共用票的問題,需要使用創建線程的第二種方式:

  1. 創建實現了Runnable介面的子類
  2. 重寫Runnable介面中的run方法
  3. 創建實現了Runnable介面的子類的對象
  4. 創建Thread類的對象,也就是在創建線程
  5. 把實現了Runnable介面的子類對象作為參數傳遞給Thread類的構造方法

這種方式的特點是:把線程任務進行了描述,也就是面向對象,從而實現了線程任務和線程對象的分離。線程執行什麼任務不再重要,只要是實現了Runnable介面的子類對象都可以作為參數傳遞給Thread的構造方法,此方式較為靈活。

第二種方式還有一個好處是實現介面了,還不影響繼承其他父類。

 1 //這個類只是為了描述線程的任務,跟線程沒有任何關係。
 2 class Ticket implements Runnable
 3 {
 4     private int num = 50; 
 5     public void run()
 6     {
 7         while(num>0)
 8         System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
 9     }
10 }
11 
12 class Maipiao
13 {
14     public static void main(String[] args) 
15     {
16         Ticket t = new Ticket();
17         
18         Thread win1 = new Thread(t);
19         Thread win2 = new Thread(t);
20         Thread win3 = new Thread(t);
21         Thread win4 = new Thread(t);
22 
23         win1.start();
24         win2.start();
25         win3.start();
26         win4.start();
27     }
28 }

 總結:為什麼創建線程的第二種方式可以解決賣票問題?

 第一種創建線程的方式:線程和線程任務是綁定在一起的,創建了4個線程就創建了4份資源。

 第二種創建線程的方式:線程和線程任務進行了分離,只需要創建一個任務,讓4個線程分別去執行。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux虛擬機的安裝(圖文詳解) 下篇會接續Hadoop集群安裝(以此為基礎) 一、安裝準備 VMWorkstation、linux系統鏡像(以下以CentOS6.5為例) 二、安裝過程詳解 關閉防火牆: service iptables stop chkconfig iptables off 添 ...
  • RHEL7.2配置本地yum源 [root@localhost ~]#monut /dev/sr0 /mnt #掛載光碟 [root@localhost ~]# rm -rf /etc/yum.repos.d/* [root@localhost ~]# vim /etc/yum.repos.d/rh ...
  • 1、nginx入門篇 nginx安裝與基礎配置 nginx優化配置分析與說明 nginx模塊結構 2、nginx功能篇 配置nginx的gzip功能 配置nginx的rewrite功能 配置nginx的proxy功能 配置nginx的cache功能 配置nginx的郵件服務功能 3、nginx實現篇 ...
  • 在weblogic中部署項目通常有三種方式:第一,在控制臺中安裝部署;第二,將部署包放在domain域中autodeploy目錄下部署;第三,使用域中配置文件config.xml 進行項目的部署。 控制台部署 1 啟動weblogic服務,登錄到weblogic控制台頁面,輸入用戶名和密碼,登錄到控 ...
  • 主域控角色遷移和奪取(轉載) 轉載自:http://yupeizhi.blog.51cto.com/3157367/1427978 操作系統版本:Windows2012R2 數據中心版 FSMO角色遷移 主域控沒有掛的情況下使用FSMO角色遷移 FSMO角色遷移步驟,下麵步驟在備用域控上執行 0、使 ...
  • Permission deny 許可權 拒絕 查看許可權 ls -a ls -la expression 查看文件夾裡邊東西的許可權 用戶群的分類 組群:一個操作系統可能幾個人同時用 方便小組的文件安全和共用 用戶 組群(在一個組裡邊的) Others root rws rws rws 天神 使用者/ro ...
  • ...
  • 首先聲明,代碼是從一個大神的源碼里偷來的,我稍微整理了一下,現在可以通用。 作用是把你現有的資料庫表結構和數據生成yii2的遷移文件 1.下載模塊源碼解壓縮到 backend/modules/ 2.在 backend/config/main.php 添加如下配置 3.在你的後臺訪問 模塊下載地址 : ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...