JAVAマルチスレッド実装Runnable方式

2130 ワード

(一)
手順:
 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();
	
	
	}


}


1. , 。

2. Runnable run 。

synchronized 。

3. main 。