Java可运行接口解决方案

时间:2019-05-18 14:51:25

标签: java multithreading

有人可以解释下面的代码

// keeping void** just as an indicator in the interface
// that the pointer is pointing to a pointer to any type
// it could be replaced by just void*
int create_buffer(void** ptr, ...)
{
    void* result = malloc(...);
    memcpy((void*)ptr, &result, sizeof result);
}

输出结果为1 3 3 2.请解释一下。

预先感谢

1 个答案:

答案 0 :(得分:1)

当调用thread.start()方法时,run()方法内部的代码将在新线程上执行(因为TestThread类实现了Runnable)。

当您调用thread.run()时,这是从主线程中而不是先前启动的方法中调用run()方法。这基本上不使用任何线程功能。

此run()函数从主线程完成后,将退出此函数并到达println(“ 2”)行。

似乎很直观,因为您在println(“ 1”)之前调用了thread.start(),所以它应该打印“ 3 1 3 2”,但是,由于多线程的复杂性,无法保证在其中进行任何排序实现的方式。它可能会打印出“ 1 3 3 2”或“ 3 1 3 2”,这取决于许多因素。

您可以尝试进行的一项实验是使打印语句包含被调用的线程的名称。

public class TestThread implements Runnable {

    public static void main(String[] args) {
        Thread thread = new Thread(new TestThread(), "newThread");
        thread.start();
        System.out.println(Thread.currentThread().getName() + ": 1");
        thread.run();
        System.out.println(Thread.currentThread().getName() + ": 2");
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + ": 3");
    }
}

对我来说,输出:

main: 1
main: 3
newThread: 3
main: 2