gpt4 book ai didi

java - 在 Java 中创建线程的肮脏方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:25:32 24 4
gpt4 key购买 nike

我最近开始研究 Java 中的多线程。在探索事物时,我发现有 2 种快速而肮脏的方法可以在 Java 中“随时随地”创建线程。这是示例:

public static void main(String[] args) {
System.out.println("Thread: " + Thread.currentThread().getName());

new Thread() {
public void run() {
System.out.println("Thread: "
+ Thread.currentThread().getName());
System.out.println("hello");
}
}.start();

new Thread(new Runnable() {

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

}).start();
}
  1. 第一个是以 new Thread() {
  2. 开头的
  3. 第二个在以 new Thread(new Runnable() {

我只想问一下这两种方式是否正确?除了实现 Runnable Interface 与扩展 Thread class 的区别之外,还有其他区别吗?

最佳答案

这两种方式都是可以接受的(在我看来,这两种方式都不是“肮脏的”)。第一个不那么冗长,在像这样的微不足道的情况下我更喜欢那个。如果你正在扩展 Thread,那么你也可以跳过 Thread.currentThread():

new Thread() {
public void run() {
System.out.println("Thread: " + getName());
System.out.println("hello");
}
}.start();

然而,在任何非平凡的情况下(即,如果线程执行的不仅仅是几次打印)通常的规则是 "favor composition over inheritance" apply 提倡第二种方法。

如果您使用的是 Java 8,您甚至可以利用 Runnable 是一个函数式接口(interface)这一事实:

new Thread(() -> {
System.out.println("Thread: " + Thread.currentThread().getName());
System.out.println("hello");
}).start()

最后一点:这些天我很少使用线程。每当我这样做时,我都倾向于使用 ExecutorServices 重写它。

关于java - 在 Java 中创建线程的肮脏方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com