Java多線程實現(xiàn)Runnable方式
本文為大家分享了Java多線程實現(xiàn)Runnable方式的具體方法,供大家參考,具體內(nèi)容如下
(一)步驟
1.定義實現(xiàn)Runnable接口
2.覆蓋Runnable接口中的run方法,將線程要運行的代碼存放在run方法中。
3.通過Thread類建立線程對象。
4.將Runnable接口的子類對象作為實際參數(shù)傳遞給Thread類的構(gòu)造函數(shù)。
為什么要講Runnable接口的子類對象傳遞給Thread的構(gòu)造方法。因為自定義的方法的所屬的對象是Runnable接口的子類對象。
5.調(diào)用Thread類的start方法開啟線程并調(diào)用Runnable接口子類run方法。
(二)線程安全的共享代碼塊問題
目的:程序是否存在安全問題,如果有,如何解決?
如何找問題:
1.明確哪些代碼是多線程運行代碼。
2.明確共享數(shù)據(jù)
3.明確多線程運行代碼中哪些語句是操作共享數(shù)據(jù)的。
class Bank{
private int sum;
public void add(int n){
sum+=n;
System.out.println("sum="+sum);
}
}
class Cus implements Runnable{
private Bank b=new Bank();
public void run(){
synchronized(b){
for(int x=0;x<3;x++)
{
b.add(100);
}
}
}
}
public class BankDemo{
public static void main(String []args){
Cus c=new Cus();
Thread t1=new Thread(c);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
或者第二種方式,將同步代碼synchronized放在修飾方法中。
class Bank{
private int sum;
public synchronized void add(int n){
Object obj=new Object();
sum+=n;
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("sum="+sum);
}
}
class Cus implements Runnable{
private Bank b=new Bank();
public void run(){
for(int x=0;x<3;x++)
{
b.add(100);
}
}
}
public class BankDemo{
public static void main(String []args){
Cus c=new Cus();
Thread t1=new Thread(c);
Thread t2=new Thread(c);
t1.start();
t2.start();
}
}
總結(jié):
1.在一個類中定義要處理的問題,方法。
2.在實現(xiàn)Runnable的類中重寫run方法中去調(diào)用已經(jīng)定義的類中的要處理問題的方法。
在synchronized塊中接受要處理問題那個類的對象。
3.在main方法中去定義多個線程去執(zhí)行。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法
描述一下近期使用EasyConnect遇到的問題,下面這篇文章主要給大家介紹了關(guān)于登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
JDK14新特性之switch表達(dá)式的實現(xiàn)
這篇文章主要介紹了JDK14新特性之switch表達(dá)式的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Java如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組
這篇文章主要介紹了Java如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Java創(chuàng)建圖形用戶界面(GUI)入門詳細(xì)指南(Swing庫JFrame類)
這篇文章主要介紹了使用Java?Swing庫的JFrame類創(chuàng)建基本的圖形用戶界面,包括窗口的創(chuàng)建、組件的添加和事件處理,通過代碼講解了如何設(shè)置窗口大小、添加按鈕及處理按鈕點擊事件,適合初學(xué)者學(xué)習(xí)和開發(fā)GUI應(yīng)用程序,需要的朋友可以參考下2024-11-11

