有人可以解释下面的代码
// 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.请解释一下。
预先感谢
答案 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