项目中怎么控制多线程高并发访问

 我来答
滟丽00
高粉答主

2019-07-21 · 繁杂信息太多,你要学会辨别
知道答主
回答量:1487
采纳率:0%
帮助的人:23.8万
展开全部

1、首先明确信号量Semaphore的用法,然后新建一个项目,new-->file-->class,随意命名,此处命名为semaphoreDemo。

2、首先开始一个线程MyTask,实现接口,然后在其中定义窗口买票的流程,主要有进入,买完了,离开,释放信号量,让下一个进入。

3、然后设定一个信号量,主要是执行函数,此处定义窗口个数,定义线程池ExecutorService,循环执行这20个人。

4、最后通过main函数调用execute函数进行排队问题,开始排队线程。

5、在打印中可以看到两个线程在并发执行,剩下的人处于排队状态,只有上一个执行完了下一个才执行。

59分粑粑分享生活
高粉答主

2020-01-17 · 专注生活好物分享,解答日常方方面面的问题
59分粑粑分享生活
采纳数:326 获赞数:119825

向TA提问 私信TA
展开全部

项目中控制多线程高并发访问的方法和详细的操作步骤如下:

1、首先,明确信号量Semaphore的用法,然后创建一个新项目,new--> file--> class,并根据需要命名它,这里命名为semaphoreDemo,如下图所示。

2、其次,启动一个线程MyTask,实现接口,然后定义窗口买票的流程,主要包括进入、购买、离开、释放信号量以及让下一个进入,如下图所示。

3、接着,设置一个信号量,主要是执行功能。 在这里,定义窗口数,定义线程池ExecutorService,并循环执行这20个人,如下图所示。

4、然后,由main函数调用execute函数以执行排队问题,并启动排队线程,如下图所示。

5、最后,在打印中,您可以看到两个线程正在同时执行,其余人员处于队列中。 仅当前一个完成时,才执行下一个,如下图所示。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿达贴
推荐于2017-11-23 · TA获得超过177个赞
知道小有建树答主
回答量:1513
采纳率:0%
帮助的人:235万
展开全部
synchronized关键字主要解决多线程共享数据同步问题。
ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题。
ThreadLocal和Synchonized都用于解决多线程并发访问。但是ThreadLocal与synchronized有本质的区别:
synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。而ThreadLocal为每一个线程都提供了变量的副本,使 得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。而Synchronized却正好相反,它用于在多个线程间通信 时能够获得数据共享。
Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。当然ThreadLocal并不能替代synchronized,它们处理不同的问题域。Synchronized用于实现同步机制,比ThreadLocal更加复杂。
1、Java中synchronized用法
使用了synchronized关键字可以轻松地解决多线程共享数据同步问题。
synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分 类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。
synchronized取得的锁都是对象;每个对象只有一个锁(lock)与之相关联;实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式