Java多线程初学者指南(3):使用Runnable接口创建线程

嘿,这个 Java 多线程初学者指南示例很有趣。
当我看到这段代码时,我的心猛地一跳。
同一个 MyRunnable 实例如何创建两个 Thread 对象?当时我很困惑,但转念一想,又觉得有道理。
Thread 对象必须将实例化的 MyRunnable 作为参数。

但是,此代码中有一个小错误,您可以在此处看到:
MyRunnable t = new MyRunnable(); MyRunnable t = new MyRunnable(); Thread 线程 = new Thread(t, MyThread); 线程线程 = new Thread(t); 线程.setName(MyThread); 线程.start(); 线程.start();
这里,当创建Thread对象时,第一个t是MyRunnable的实例,但最后有一个额外的MyThread参数,这并不完全正确。
创建第二个Thread对象时,直接传t,这样就可以了,但是后来改名为MyThread,又出错了。
当我看这段代码时,我认为作者可能是在演示线程名称设置,但表达方式有点混乱。

运行结果应如下所示: 每个线程打印其名称:
线程0 线程 1
因为默认的线程名称是Thread-后跟一个数字。
如果我们要设置线程名称,需要在创建Thread对象时指定。
设置thread.setName(MyThread);这在第一次创建 Thread 对象时没有效果,因为它是由后续 Thread = new Thread(t); 创建的。
被覆盖。

我也尝试更正它并这样写:
封装我的线程; 公共类 MyRunnable 实现 Runnable { 公共无效运行(){ System.out.println(Thread.currentThread().getName()); } 公共静态无效主(字符串[] args){ MyRunnable t = new MyRunnable(); 线程 thread1 = new Thread(t, "MyThread1 "); 线程 thread2 = new Thread(t, "MyThread2 "); 线程1 .start(); 线程2 .start(); }
这样,两个线程的名称分别为MyThread1 和MyThread2 运行结果如下:
我的线程1 我的线程2
当时我看了一下代码,觉得这个例子虽然有一些小错误,但是基本思想还是正确的。
学习多线程,必须要多练习、多尝试,才能完全理解。

java中线程池1

Java中的线程池就是复用线程,这样既省时又省力。
解决资源高、性能差、CPU空闲的问题。
如何使用?基本主题、最大主题、队列、拒绝策略可以自行修改。

例如,在这个项目中我有,核心2 ,最大4 ,队列2 ,空闲6 0秒。
如果任务多,线程就会相应移动,如果任务少,就休息一下。

注意队列,不要无限次使用,容易崩溃。
参数调整,CPU密集型,核心数与CPU核心数相同。
IO密集型,使用更多的线程和队列。

监控线程池,检查状态,调整参数,保证稳定性。
线程池是一个有用的并发工具。
用得好,就会有效果。
你自己看看,还有其他问题吗?

在Java中如何使用ThreadFactory自定义线程创建

自定义 ThreadFactory 可以工作。

基本值:控制线程名称、优先级和保护状态。

实现很简单:只是一个newThread方法。

要点:
线程名称:名称前缀+序号。

优先级:设置优先级。

守护进程状态:setDaemon。

使用线程池: 将其传递到 ThreadPoolExecutor 构造函数中。

示例: 爪哇 new NamedThreadFactory("MyPool");
扩展:
传递参数来配置优先级和守卫状态。

创建记录日志监控。

场景:
注册表故障排除。

性能优化。

守护进程线程管理。

就这么做吧。

JAVA面试题 JAVA中创建线程有几种不同的方式

嘿兄弟,我们来谈谈线程创建吧。
过去我在 Java 工作中遇到过很多陷阱。
我记得有一次我正在开发一个多线程程序。
我当时是个白痴,直接继承了Thread部分。
原来,天啊,后来我想扩展这个功能,但是发现不可能,因为Java的单继承,我的程序就卡在那里了。

后来学聪明了,开始使用Runnable接口来创建线程。
这东西不错,可以和其他品类组合,弹性强。
记得有一次,我在做一个复杂的业务逻辑,我使用的是Runnable接口,这样不仅让代码更清晰,而且方便维护。
那时我的心情很舒畅。

但说实话,一开始我很困惑。
你为什么问我?因为我发现直接继承Thread类很容易,而且写起来也不难。
当时我就想直接继承不好吗?但后来我发现,简单就是简单,但是后期维护却很难。

所以兄弟,如果你刚刚开始,我建议你先使用 Runnable 接口。
随着你水平的提高,你会逐渐体会到直接继承线程类的好处。
但说实话,在实际应用中,我最常看到的还是Runnable接口。
这件事我不敢乱说,毕竟我不是全知全能的。
哈哈,再见。
如果您有任何不明白的地方,请随时问我。