java多執行緒的3種寫法
1.Thread
/** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class FirstThreadTest extends Thread { int i = 0; public FirstThreadTest(int i) { super(); this.i = i; } public FirstThreadTest() { super(); // TODO Auto-generated constructor stub } public FirstThreadTest(Runnable target, String name) { super(target, name); // TODO Auto-generated constructor stub } public FirstThreadTest(Runnable target) { super(target); // TODO Auto-generated constructor stub} public FirstThreadTest(String name) { super(name); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, Runnable target, String name, long stackSize) { super(group, target, name, stackSize); // TODO Auto-generated constructor stub} public FirstThreadTest(ThreadGroup group, Runnable target, String name) { super(group, target, name); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, Runnable target) { super(group, target); // TODO Auto-generated constructor stub } public FirstThreadTest(ThreadGroup group, String name) { super(group, name); // TODO Auto-generated constructor stub } // 重寫run方法,run方法的方法體就是現場執行體 public void run() { //當前執行緒: this System.out.println(this.getName() + " " + i); } public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); new FirstThreadTest(888).start(); } }
2.Runnable
/** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class RunnableThreadTest implements Runnable { private int i; public RunnableThreadTest() { super(); // TODO Auto-generated constructor stub } public RunnableThreadTest(int i) { super(); this.i = i; } @Override public void run() { //當前執行緒: Thread.currentThread() System.out.println(Thread.currentThread().getName() + " " + i); } public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); RunnableThreadTest rtt = new RunnableThreadTest(999); new Thread(rtt, "新執行緒1").start(); } }
3.Callable
/** * */ package testJava2.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class CallableThreadTest implements Callable<Integer> { @Override public Integer call() throws Exception { int i = 2017; System.out.println(Thread.currentThread().getName() + " " + i); return i; } public static void main(String[] args) { CallableThreadTest ctt = new CallableThreadTest(); FutureTask<Integer> ft = new FutureTask<>(ctt); new Thread(ft, "有返回值的執行緒").start(); try { System.out.println("子執行緒的返回值:" + ft.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
相關推薦
Java多執行緒3種實現方法
Java中的多執行緒有三種實現方式:1.繼承Thread類,重寫run方法。Thread本質上也是一個實現了Runnable的例項,他代表一個執行緒的例項,並且啟動執行緒的唯一方法就是通過Thread類的start方法。2.實現Runnable介面,並實現該介面的run()
跟著例項學習java多執行緒3-synchronized的多種寫法有何區別?
同步程式碼塊是一種有效實現操作原子性的方法,上一章我們講了一些同步的原子操作的基礎。 現在我們回憶一下上一章的兩個問題。 1:不同的synchronized的寫法有什麼區別,又該怎麼寫建立執行緒的程式碼呢? 以class例項物件作為鎖的寫法 寫法1 package com.
java多執行緒3:關鍵字synchronized取得的鎖都是物件鎖,而不是把一段程式碼或者方法(函式)當作鎖
java多執行緒3:關鍵字synchronized取得的鎖都是物件鎖,而不是把一段程式碼或者方法(函式)當作鎖 a.當多個執行緒訪問同一個物件的時候,哪個執行緒先執行帶synchronized關鍵字的方法,哪個執行緒就該方法所屬物件的鎖Lock,那麼其他物件就智慧呈等待狀態。但是如果多個執行緒訪
java多執行緒3 thread中的靜態方法
轉自:http://www.cnblogs.com/xrq730/p/4851344.html Thread類中的靜態方法 Thread類中的靜態方法表示操作的執行緒是"正在執行靜態方法所在的程式碼塊的執行緒"。為什麼Thread類中要有靜態方法,這樣就能
Java多執行緒—兩種賣票
public class MyThread1 extends Thread{ private int ticket=10; public void run() { for(int i=0;i
java多執行緒3:原子性,可見性,有序性
概念 在瞭解執行緒安全問題之前,必須先知道為什麼需要併發,併發給我們帶來什麼問題。 為什麼需要併發,多執行緒? 時代的召喚,為了更充分的利用多核CPU的計算能力,多個執行緒程式可通過提高處理器的資源利用率來提升程式效能。 方便業務
java多執行緒的3種寫法
1.Thread /** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * @version */ public class FirstThreadTest exte
實現java多執行緒的3種方式,99%人沒用過第3種
實現多執行緒的3種方式 1、繼承Thread類 看jdk原始碼可以發現,Thread類其實是實現了Runnable介面的一個例項,繼承Thread類後需要重寫run方法並通過start方法啟動執行緒。 繼承Thread類耦合性太強了,因為java只能單繼承,所以不利
JAVA多執行緒實現的3種方式
JAVA多執行緒實現方式主要有三種:繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的多執行緒。其中前兩種方式執行緒執行完後都沒有返回值,只有最後一種是帶返回值的。 1、繼承Thread類實
java 多執行緒的一種實現方式
private ThreadPoolExecutor threadPoolExecutor; /** * 獲取執行緒池 * @return */ private ThreadPoolExecutor getThreadPoolExecutor(){
java多執行緒、FutureTask的用法及兩種常用的使用場景
Java多執行緒實現的方式有四種 1.繼承Thread類,重寫run方法 2.實現Runnable介面,重寫run方法,實現Runnable介面的實現類的例項物件作為Thread建構函式的target 3.通過Callable和FutureTask建立執行緒 4.通過執行緒池
java:多執行緒(匿名內部類實現執行緒的兩種方式)
public class Demo4_Thread { public static void main(String[] args) { new Thread() {//1.繼承Thread類 public void run() {//2.重寫run方法 for(int i
java:多執行緒(實現Runnable的原理)及二種方式的區別
* 1,看Thread類的建構函式,傳遞了Runnable介面的引用 * 2,通過init()方法找到傳遞的target給成員變數的target賦值 * 3,檢視run方法,發現run方法中有判斷,如果target不為null就會呼叫Runnable介面子類物件的run方法 *
Java——實現Java多執行緒的三種方法
Java虛擬機器允許應用程式併發地執行多個執行緒。在Java語言中,多執行緒的實現一般有以下3種方法,其中前兩種是最常用的方法。 1.繼承Thread類,重寫run()方法 Thread本質上也是實現了Runnable介面的一個例項,它代表一個執行緒的例項。並且,啟動執行緒的唯一方法就是通過
java多執行緒:3 執行緒狀態
執行緒從建立到結束執行,經過多個狀態,每個狀態對應著不同的操作,具體如下: 1 建立(new),2 可以執行(runnable)、3 執行(running)、4 等待(waiting)、5 阻塞(blocked)、6 結束(dead) 建立執行緒 當通過new Thre
java多執行緒(二):建立執行緒的三種方式以及優缺點總結
一、Java中建立執行緒主要有三種方式: 1、繼承Thread類建立執行緒類 步驟: (1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。 (2)建立Thread子類的例項,即建立了執行緒物件。
java多執行緒(一):執行緒的五種基本狀態以及生命週期
1、Java執行緒具有五中基本狀態: 新建狀態(New):當執行緒物件對建立後,即進入了新建狀態,如:Thread thread1 = new MyThread(); 就緒狀態(Runnable):當呼叫執行緒物件的start()方法[ 如:thread1 .start(); ],執行緒
《Java多執行緒程式設計實戰》——第3章 Immutable Object(不可變物件)模式
通過使用對外可見的狀態不可變的物件,無需額外的同步訪問控制。既保證了資料一致性,又避免了同步訪問控制所產生的額外開銷和問題,也簡化了程式設計。 狀態不可變的物件:物件一經建立,其對外可見的狀態就保持不變,如String和Integer。 Immutable Object模式:將現實世界中狀態
Java併發程式設計(二)多執行緒四種實現方式
Java實現多執行緒的方式 Java實現多執行緒的方式有4種: 繼承Thread方法、實現Runnable介面、實現Callable介面並通過FutureTask建立執行緒、使用ExecutorService。 其中,前兩種執行緒執行結果沒有返回值,後兩種是有返回值的。 1、繼承Th
Java多執行緒2.4.生產者與消費者之間的關係3
生產者與消費者之間的關係 1、執行緒間通訊舉例的問題解決2 (1)建立學生類 package cn.itcast_05; public class Student { String name; int age; boolean flag; // 預設情況是沒有