【发布时间】:2016-06-07 05:53:31
【问题描述】:
我知道这是一个有点幼稚的问题,但我想了解 Java 中多线程背后的基本工作原理。考虑下面的代码,说A在主线程中执行,它开始执行另一个工作线程,在B类中定义。我想知道B.func1是否可以从A调用并运行B的方法,是否可以并行执行?
public class A {
public static void main(String[] args) {
B obj = new B();
obj.start();
obj.func1();
}
}
public class B extends Thread {
public B() {
//constructor
}
public void run() {
while(true) {
//do somethings
}
}
public void func1() {
//do someotherthings
}
}
【问题讨论】:
-
@HovercraftFullOfEels 共享字段应该正确同步,在某些情况下使它们易失性就足够了,但对于其他情况,这可能涉及其他同步机制
-
@HovercraftFullOfEels,IMO,您只会让菜鸟们误入歧途,告诉他们同步 方法。同步的唯一目的是保护数据。我们经常谈论需要同步一个方法,而我们真正的意思是我们需要同步一些由该方法独占访问的数据。但更常见的是,可以通过不止一种方法访问相同的数据。新手需要知道
synchronized不起作用,除非每一 位访问共享数据的代码在同一个对象 上都是synchronized。 -
@jameslarge:你是对的。评论已删除,感谢您的澄清/更正。
-
是否可以确定执行顺序? B 类的 run 方法后跟 B 类的 funct1 方法还是相反?
标签: java multithreading