あなたはすでに働いているスレッドでメソッドを呼び出したときはどうなりますか?

Zyzyx:

それ以下の私のテストコードを実行すると、それがまだ実行中のスレッドのメソッドを呼び出すと、スレッドの現在の実行の間でメソッドを実行しますことが表示されます。私は思ったんだけどは、正確に何が起こっているのですか?

スレッドは、whileループを一時停止する方法を実行して、ループに戻っていますか?それはしばらくのコードまたはその間のどこかの最後にそうしていますか?

あるいは、この方法は、他の別のスレッドで実行しますか?または完全に他の何か?

package test;

public class main {
    public static threed thred = new threed();

    public static void main(String[] args) throws InterruptedException {
        thred.start();
        Thread.sleep(10000);
        while (true) {
            System.out.println("doing it");
            thred.other();
            Thread.sleep(2000);
            thred.x++;
        }
    }
}

そして

package test;

public class threed extends Thread {
    public int x;

    public threed() {
        x = 0;
    }

    public void run() {
        while (x < 10) {
            System.out.println(x);          
        }   
    }

    public void other() {
        System.out.println("other " + x);
    }
}
ピーターLawrey:

呼ばれるすべてのメソッドはすべてのオブジェクトの現在のスレッドを使用しています。あなたは上のメソッドを呼び出す場合はThread、それをも現在のスレッド上の他のようにそのメソッドを呼び出します。

一つだけ少し混乱しているが、そのあるstart()別のスレッドとの通話を開始しrun()、その新しいスレッドのために。

これは、それが拡張することが最善ではありません理由の一つですThreadが、合格Runnableあまりにも頻繁にする方法としてそれをどちらかそれらが表示されるか、あなたが期待していない副作用が何を得るいたしません。

注:Javaは、多くの場合、ヒープ(ネイティブ)オフ、実際にあるリソースを管理するためのヒープ上のプロキシを目的としています。例えばダイレクトのByteBufferまたはJTableのか、ソケットまたはたFileOutputStream。これらのオブジェクトは、OSがそれらを理解して実際のリソースではなく、オブジェクトのJavaは、それが簡単にJavaコードからリソースを操作/管理するために行うために使用しています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=196065&siteId=1