多线程的使用场景(如何在两个线程间共享数据)

:暂无数据 2026-05-09 20:00:01 0
大家好,多线程的使用场景相信很多的网友都不是很明白,包括如何在两个线程间共享数据也是一样,不过没有关系,接下来就来为大家分享关于多线程的使用场景和如何在两个线程间共享数据的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

如何在两个线程间共享数据

ps:由于最近的面试很多问题都涉及多线程,自己感觉以前学的还是太浅,再展开学学吧。
今天先从考的比较频繁的“多线程共享数据”开始。
一.目标
谈到多线程共享数据,理想情况下我们希望做到“同步”和“互斥”。这是目标我们暂且把它先放到这。
二.分类
多线程共享数据通常的场景有一下两种:
场景一:
卖票,我们都买过火车票。要买火车票我们可以去车站,也可以通过代售点(或网购),但不管有多少种方式火车票的总数是一定的。
场景抽象:
对于卖票系统每个线程的核心执行的代码都相同(就是票数--)。
解决方法:
只需创建一个Runnable,这个Runnable里有那个共享数据。
代码模拟:
Java代码
package 多线程共享数据;
public class Ticket implements Runnable{
private int ticket = 10;
public void run() {
while(ticket》0){
ticket--;
*****("当前票数为:"+ticket);
}
}
}

C++中程序在哪些场合应该使用多线程

用一句话来回答就是:当你想一心二用的时候你就应该使用多线程!比如我现在想一边敲这些字一边和可乐就得用多线程。在你炒菜的同时又要烧水也得用多线程(并发)。。当你很用心在写一段很长的代码的时候,如果别人在这个时候叫你,你不希望听不见那么也得用多线程(防止阻塞,UI假死)。再比如分房的年代,如果是按照人头分房,你希望分的房子大一点那么你也得用多线程(可能会获得更多的CPU时间片,特别是在多核上)。如果你是一个创业者,当你的公司渐渐的长大,人越来越多,事情也越来越复杂的时候,你希望不同的人去做不同的事情,你希望把更多的资源给重要的人,而不希望(至少希望不是很多)那些不太重要的事情占用你某些宝贵的资源的时候,你也得用多线程(优先级)。因此我认为有四种情况,我们是需要使用多线程的。即:
1. 有多件事情,顺序执行无法满足的时候;
2. 在处理长时间的事情(算法)时为了防止应用界面(UI)不响应用户输入,造成UI假死的时候;比如大图像渲染、大数据处理/排序、搜索等
3. 为了通过获得更多的CPU时间片来提高程序效率的时候;
4. 需要同时处理的事情有优先级别的时候;应该使用高优先级线程管理对时间要求很急的任务,而使用低优先级线程执行被动任务或者对时间不敏感的任务。

java电商项目,什么场景需要使用多线程

这个很简单,高并发有多种解决方法:
1、从代码上分入手,必须得保证代码没有冗余,不要有废代码;
2、从服务器上入手,高并发一台服务器并发量有限,我们可以采用多台服务器来分担压力;
3、从存储方便入手,像我们一般高并发但是数据却可以不用存到数据库中的,我们就存在内存中,因为读内存的速度是数据库的N倍。

Linux下多线程和多进程程序的优缺点,各个适合什么样的业务场景

  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。
  如果是UNIX/linux环境,采用多线程没必要。
  多线程比多进程性能高?误导!
  应该说,多线程比多进程成本低,但性能更低。
  在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。
  多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。
  多线程是平面交通系统,造价低,但红绿灯太多,老堵车。
  我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。
  高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。
  多线程的优点:
  无需跨进程边界;
程序逻辑和控制方式简单;
所有线程可以直接共享内存和变量等;
线程方式消耗的总资源比进程方式好;
多线程缺点:
  每个线程与主程序共用地址空间,受限于2GB地址空间;
线程之间的同步和加锁控制比较麻烦;
一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU
  
  多进程优点:
  每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大
多线程缺点:
  逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大;
最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……
  方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。
  

读完本文,你对多线程的使用场景如何在两个线程间共享数据之间的关系,是否有了新的认识?
本文编辑:admin

更多文章:


java移位运算有什么作用(在java中, 一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方怎么理解)

java移位运算有什么作用(在java中, 一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方怎么理解)

很多朋友初次接触java移位运算有什么作用可能会觉得有点陌生,这很正常。今天这篇文章,咱们就一起把在java中, 一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方怎么理解这事儿聊透,希望能帮您理清思路。

2026年5月9日 21:40

2016excel教程自学网(excel2016包含公式怎么操作)

2016excel教程自学网(excel2016包含公式怎么操作)

2016excel教程自学网的背后,隐藏着怎样的秘密?excel2016包含公式怎么操作又在其中扮演了何种角色?带着疑问,我们一起探秘。

2026年5月9日 21:20

php写api(php开发api接口,如何做才算是安全的)

php写api(php开发api接口,如何做才算是安全的)

最新数据显示,关注php写api的人中,超过70%都对php开发api接口,如何做才算是安全的抱有浓厚兴趣。本文将满足这一核心需求。

2026年5月9日 21:00

scala读音(戛纳两个字怎么读)

scala读音(戛纳两个字怎么读)

想快速搞懂scala读音吗?本文将围绕戛纳两个字怎么读等核心问题,用最直白的语言为您提供一份实用指南,帮您节省大量摸索的时间。

2026年5月9日 20:40

指针和数组的关系和区别(C语言算法中指针和数组有什么区别)

指针和数组的关系和区别(C语言算法中指针和数组有什么区别)

今天给各位分享C语言算法中指针和数组有什么区别的知识,其中也会对C语言算法中指针和数组有什么区别进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年5月9日 20:20

多线程的使用场景(如何在两个线程间共享数据)

多线程的使用场景(如何在两个线程间共享数据)

大家好,多线程的使用场景相信很多的网友都不是很明白,包括如何在两个线程间共享数据也是一样,不过没有关系,接下来就来为大家分享关于多线程的使用场景和如何在两个线程间共享数据的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

2026年5月9日 20:00

loneliness(孤单的英文是什么)

loneliness(孤单的英文是什么)

朋友们,对loneliness感到陌生再正常不过了。本篇内容将化身您的指南针,帮您在孤单的英文是什么的迷雾中找到方向。

2026年5月9日 19:40

cellpadding英文(html 的 元素和属性的英文全称都是什么)

cellpadding英文(html 的 元素和属性的英文全称都是什么)

曾几何时,我也觉得cellpadding英文高不可攀,尤其html 的 元素和属性的英文全称都是什么更是一头雾水。后来才发现,只是没找对方法,希望我的经验能帮到你。

2026年5月9日 19:20

新手编程后端语言(后端开发用什么语言)

新手编程后端语言(后端开发用什么语言)

常言道:“万丈高楼平地起”。理解新手编程后端语言这座大厦,也必须从后端开发用什么语言这块基石开始。

2026年5月9日 19:00

重庆java培训班(你觉得现在的java培训怎么样)

重庆java培训班(你觉得现在的java培训怎么样)

相信点开这篇文章的你,一定对重庆java培训班抱有好奇。没关系,下面我们就结合你觉得现在的java培训怎么样,带你一步步揭开它的面纱。

2026年5月9日 18:40

最近更新

scala读音(戛纳两个字怎么读)
2026-05-09 20:40:02 浏览:0
loneliness(孤单的英文是什么)
2026-05-09 19:40:02 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
mysql insert into字段顺序问题(mysql insert into的问题)
2026-04-13 16:00:02 浏览:1
标签列表