這篇文章將為大家詳細講解有關Java多線程如何實現Runnable方式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
具體內容如下
(一)步驟
1.定義實現Runnable接口
2.覆蓋Runnable接口中的run方法,將線程要運行的代碼存放在run方法中。
3.通過Thread類建立線程對象。
4.將Runnable接口的子類對象作為實際參數傳遞給Thread類的構造函數。
為什么要講Runnable接口的子類對象傳遞給Thread的構造方法。因為自定義的方法的所屬的對象是Runnable接口的子類對象。
5.調用Thread類的start方法開啟線程并調用Runnable接口子類run方法。
(二)線程安全的共享代碼塊問題
目的:程序是否存在安全問題,如果有,如何解決?
如何找問題:
1.明確哪些代碼是多線程運行代碼。
2.明確共享數據
3.明確多線程運行代碼中哪些語句是操作共享數據的。
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();
}
}關于“Java多線程如何實現Runnable方式”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。