我有一个写文件的方法,它可能有点慢。因此,我这样做是为了避免阻止其他操作:
// things A
method();
// things B
public void method(){
new Thread(() -> {
// slow stuff
}).start();
}
然而,直到在a之后执行B之后,仍然需要一段时间,我想知道是否应该这样做:
// things A
new Thread(() -> {
method();
}).start();
// things B
public void method(){
// slow stuff
}
或者,换句话说,调用一个内部有线程的方法是否意味着等待该方法结束,从而等待线程结束?
只是为了澄清一些事情:我想知道两个选项是否相同,或者在第一个选项中,线程是否应该完成以启动B指令。
调用带有线程的方法是否意味着等待方法结束,因此线程结束?
不。为了强调线程不是一个因素,我使用了您的原始代码:
method();
// things B
public void method(){
new Thread(() -> {
// slow stuff
}).start();
}
并在整个过程中散布了一堆System.out.println()
调用:
method()
之前,一个在method()
的开头,一个在末尾也:
Thread.sleep()
2秒来执行“慢速操作”println()
包括当前日期时间import java.time.LocalDateTime;
public class ThreadExample {
public static void main(String[] args) {
System.out.println("main >> " + LocalDateTime.now());
new ThreadExample().method();
System.out.println("main << " + LocalDateTime.now());
}
public void method() {
System.out.println(" method >> " + LocalDateTime.now());
new Thread(() -> {
System.out.println(" thread >> " + LocalDateTime.now());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(" thread << " + LocalDateTime.now());
}).start();
System.out.println(" method << " + LocalDateTime.now());
}
}
下面的输出显示了一些内容:
method()
之前和之后)基本上是瞬时的-09:10:22.036305开始,09:10:22.037957结束,相差0.001652秒method()
相同,从09:10:22.037564开始到09:10:22.037897结束几乎是瞬时的,相差0.000333秒Thread.sleep()
中要求的2秒,加上与其他线程类似的少量执行时间(0.00392)main()
中)和method()
都在线程
完成之前完成~2秒后main >> 2022-06-17T09:10:22.036305
method >> 2022-06-17T09:10:22.037564
method << 2022-06-17T09:10:22.037897
thread >> 2022-06-17T09:10:22.037920
main << 2022-06-17T09:10:22.037957
thread << 2022-06-17T09:10:24.041840
我正在读一本关于JPA和EJB的书,上面有一行写着: “单例会话bean可以使用容器管理或bean管理的并发。默认为容器管理,对应于所有业务方法上的写锁。所有业务方法调用都是序列化的,因此在任何给定时间只有一个客户端可以访问bean。同步过程的实际实现由供应商提供。”-具体的。" 序列化方法调用意味着什么?为什么保证在任何给定时间只有一个客户机可以访问bean?
Java.lang.AutoCloseable的close()方法的Java文档说 注意,与Closeable的方法不同,此方法不要求是幂等的。换句话说,多次调用此close方法可能会产生一些明显的副作用,这与不同,如果多次调用该方法,则要求该方法无效。但是,强烈鼓励该接口的实现者使其闭式方法是幂等的。 他们所说的幂等方法是什么意思,两次调用这个方法有什么副作用? 既然interface扩展了,为
从逻辑上讲,调用< code>wait方法的线程应该已经获得了正在调用< code>wait的对象的固有锁。 oracle教程中提到“在对象的同步方法中调用< code>wait是获取内部锁的一种简单方法”,这意味着至少还有另一种方法可以获取锁。 我的问题是,为了调用< code>wait,除了在synchronized方法内部调用< code>wait之外,还有其他方法可以获取内部锁吗?...它
问题内容: 我想确切地知道当多个goroutins访问go地图时,假设我们有一个。多个goroutins修改User结构的字段会导致数据损坏吗?还是像非线程安全这样的操作,如果map在Go中是线程安全的,那会有什么不同? 问题答案: 同时修改可能会导致损坏, 而 与 无关。只要不对映射进行任何修改,从映射中并发读取指针是安全的。修改数据点以不更改地图本身。 同时修改本身也会冒数据损坏的风险。 没有
我想创建一个
我正在使用AndroGuard从Android应用程序的源代码中收集API调用。一些检索到的API调用在其调用描述中有$符号,例如:或,而绝大多数调用都不包括这个美元符号。例如,。 $符号在一些编程中表示变量引用,但在API调用引用中找到它是很奇怪的。我在这里怎么解释?在API调用跟踪的上下文中,$符号意味着什么?