单线程的人和多线程的人

单线程的人专注于一件事,而多线程的人则多才多艺。
单线程就像工匠,多线程就像杂技演员。
单线程挖的网很深,多线程撒的网很宽。
单线程工作缓慢而仔细地完成,多线程工作则快速完成。
使用单线程时很容易忘记事情,而使用多线程时很容易分心。
单股像激光一样聚焦,多股像风一样灵活。
单线程需要工具辅助,多线程需要时间管理。
单线程理解深入,多线程适应性广泛。
单线程有耐心,多线程有韧性。
你自己掂量一下吧。

单线程和多线程是什么意思

一根线就是通往终点的路。
乘法同时采用多条路径。

每个当事人的代码都持续受到封锁的影响。
乘法可以同时做很多事情。

我上周刚刚处理了一个单线程问题,用户界面卡住了。
多行、后台运算不影响使用。

说白了,你想做的事就已经定了。
一根电线足以完成简单的任务。
它们需要复杂的多阶段任务。

多行编程比较复杂,但是效果确实很强。
你自己看看吧。

多线程和单线程有什么本质区别

坦白讲,单线程和多线程的主要区别在于能否同时工作。
这个问题因资源分配和系统负担而变得复杂。

单身就像一个人独自工作。
我们去年实现的一个电商项目中,核心计算单元采用的是单线程。
当并发数达到3 000时,由于CPU一直等待I/O而崩溃。
用术语来说,它被称为雪崩效应。
事实上,前面的轻微延迟导致后面的一切都变得平淡无奇。
还有一点是,在单线程中编写代码很容易,而且基本上不存在陷阱和竞争。
但如果您正在处理耗时的流程,例如去年的视频转码要求,您可以等待。

后来发现不对劲。
虽然单线程省去了麻烦,但当用户单击“刷新”按钮时,转码完成时整个页面会变成空白。
体验非常不好。
后来我改用多线程,用四核CPU跑8 个线程。
编码转换和页面显示可以分离。
说实话,这很令人困惑。
在多线程的情况下,线程可以共享系统资源,但是很多人没有注意到这一点。
例如,共享变量无需锁定即可飞行。

还有其他关键细节。
多线程系统非常昂贵,因为它们需要管理多个线程。
去年,当服务器线程数达到1 000多个时,内存直接耗尽,相当于1 000辆车堵在高速公路上,调度成本非常高。
等等,还有别的事。
虽然多线程并发处理速度更快,但调试难度比单线程高1 00倍。
如果一个线程发生错误,其他线程可能会受到影响。
例如,我们去年修改了闪购系统。
多个线程获取相同的库存,期末库存计算为负数。
这太令人难以置信了。

我认为多线程值得尝试,但前提是:不要过度使用锁定。

多线程之线程的等待和唤醒,详解线程中的wait()和notify()方法

说实话,wait、notify、notify 等 Java 中的方法都是比较混乱的。
但拆开它很容易。

1 . wait() 方法 这是为了让线程休息一会儿。
例如,如果您在同步块中写入: 爪哇 同步(对象){ while(!状态){ obj.wait(); } // 如果满足条件,则继续
注意以下几点: 1 .等待必须在同步块中调整 2 .调整等待时间会自动释放obj锁 3 .要么通过notify/notifyAll唤醒,要么时间到了也唤醒
刚开始使用的时候很容易迷茫,以为等待之后线程就会挂掉。
其实只是暂时停在那里,锁被释放,其他线程就有机会使用这个锁。

2 通知() 这个方法就是唤醒一个人。
代码如下所示: 爪哇 同步(对象){ //更改共享数据 obj.notify();
要点: 1 .随机唤醒一个等待obj的线程 2 .唤醒并不意味着锁可以立即使用。
当前线程执行完同步块后必须释放锁。
3 . 升起的螺纹必须再次锁住
3 通知全部() 这件事让所有人都警醒了。
代码与notify类似,所以将notify改为notifyAll: 爪哇 同步(对象){ obj.notifyAll();
区别在于: 1 .唤醒所有等待obj的线程 2 .但是这些线程还是需要抢锁,最后只有一个人能先做到
4 .为什么Object类有这些方法? 其实很简单。
每个Java对象都有自己的锁(Monitor),等待/通知操作都与这个锁打交道。
如果这些方法都在Thread类中,那么锁只能绑定到Thread上,使用起来会麻烦很多。

例如,如果你调整一个随机对象的等待,那么就使用这个随机对象的锁。
这比 Thread 类有用得多。

5 常见问题 问题:thread1 .wait()如何让主线程等待? 答:Wait实际上导致调用它的线程等待。
在上面的例子中,尽管obj属于thread1 ,但主线程调用正在obj同步块中等待,因此主线程正在等待。

问题:如何选择通知对象? A:这取决于JVM是如何实现的。
通常是随机的。
关键点是: 1 .调用notify的线程必须有锁 2 .被唤醒的线程必须重新抢到锁
6 .总结 wait放在这里,alert和notifyAll放在这里,都是要使用对象锁。
使用时请记住: 1 . 必须在同步块中调用 2 . wait会释放锁,但notify/notifyAll不会 3 .被叫醒的人又得去抢锁
就这么简单,别想得太复杂。