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.マルチスレッド実行コードで共有データを操作する文を明確にします.
手順:
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 。