1

これはクラスのポートフォリオです:

public class Portfolio extends Thread {
    private volatile Thread stopMe= Thread.currentThread();
            
    public Portfolio(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }
    public void stopMe(){
        stopMe= null;
    }

    @Override
    public void run() {
        while(stopMe== Thread.currentThread()){
        try {
            for(int i=0; i<10; i++){
            //sleep(700);   
            System.out.println("You have " +(500+i)+ " shares of IBM");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println(Thread.currentThread().getName()+e.toString());
        }}
    }

    
}

これは私がスレッドを呼び出す場所です

public class TestThreads {

    /**
     * @param args
     */
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MarketNews mn= new MarketNews("Market News");
        mn.start();
        //mn.setPriority(Thread.NORM_PRIORITY+1);
        //mn.interrupt();
        mn.isAlive();       
        Portfolio p= new Portfolio("Portfolio data");
        p.start();
    //  System.out.println(Thread.currentThread().interrupted());
        System.out.println("TestThreads is finished");
        
    }

}

p.start() を呼び出しましたが、動作していないようです。stopMe 変数を削除すると、コードは正常に動作します。

4

1 に答える 1

5

実行すると:

Portfolio p= new Portfolio("Portfolio data");

stopMe は「メイン」スレッドです (現在のスレッド)

それから

p.start()

新しいものを開始するため、stopMe はそのスレッドとは異なり、ポートフォリオの「実行」機能は直接停止します

于 2012-04-18T19:09:53.877 に答える