【社区问答第二十七期】高手问答,Java多线程编程设计模式篇

-空白式 2015-11-23 10:49:07
加精
随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。
虽然传统的SSH(特指Struts+Spring+Hibernate)依然还在发挥着重要的作用,但不得不说的是,作为一名有追求的Java 开发者,眼光不应该局限于此。每一名有理想的Java 开发者都应该系统学习有关多线程编程的知识,这不仅涉及程序语言与库的学习,还需要了解现代硬件体系架构(如CPU、缓存、内存等),同时辅以恰当的设计模式,这样才能在未来游刃有余、得心应手。

本期的社区问答( 11月 23 日— 12月 4日)我们请来了《Java多线程编程实战指南(设计模式篇)》一书的作者黄文海(ID: viscent_huang)针对Java多线程编程问题给予大家解答,欢迎网友积极提问,与专家一起讨论。

嘉宾简介



黄文海

2004年开始从事软件开发工作,近几年从事软件项目管理工作。在其工作过程中积累了丰富的技术指导经验和企业内部培训经验。曾在InfoQ中文站和IBM developerWorks上发表过十几篇技术、项目管理文章。

黄文海博客地址:http://blog.csdn.net/viscent_huang/article/details/49904521

问答结束后,黄文海老师会从提问用户内抽取5名赠送《Java多线程编程实战指南(设计模式篇)》一本

图书试读下载

京东购买



--------------------------------------------------------------------------------------------------------

本期问答获奖用户:

paopaoTT
wocan23
runningtortoises
dxqrr
kouwoo

请获奖用户将本人 邮寄地址+姓名+联系电话 发私信至楼主,我们会尽快为您邮寄礼品。
...全文
37023 189 打赏 收藏 举报
写回复
189 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
west_jing 2019-10-18
来嘛,我就是观摩的,等你回复,嘿嘿
  • 打赏
  • 举报
回复
引用 2 楼 shijing266 的回复:
我先来提几个问题,希望大神解答: 1、如果多个线程同时访问一个资源,例如变量、文件等,时如何保证访问安全的问题 2、线程是可以设置优先级的, 在Thread类中,总计规定了三个优先级,分别为: l MAX_PRIORITY——最高优先级 l NORM_PRIORITY——普通优先级,也是默认优先级 l MIN_PRIORITY——最低优先级 设置之后,线程就会按这个顺序执行么? 有啥安全问题没,如何防护 3、既然存在优先级,那么肯定存在等待问题,如果多个线程一直等待,会不会死锁~
1.如果多个线程同时修改一个变量或者是对象中的某个值的时候还可以使用无锁,即Compare And Swap。直接跳过JVM 2.3前面都有解答
  • 打赏
  • 举报
回复
沙漠之瑰 2018-10-29
坐看大神解答
  • 打赏
  • 举报
回复
DEAR呆 2018-09-03
  • 打赏
  • 举报
回复
各位Java开发者大家好,本人因公司老大问及一个技术问题 故来此群寻求解答 在此先谢谢了 实现抖音 快手 小视频(因为是新媒体公司) 刷 点赞 评论 转发 播放 粉丝 等一些功能 Java 能否实现 ? 技术难点会有哪些呢?
  • 打赏
  • 举报
回复
verejava 2018-07-17
并发编程 之 线程 售票排队例子

http://www.verejava.com/?id=17236617240060
  • 打赏
  • 举报
回复
qq_39383225 2018-07-15
坐等大神解答
  • 打赏
  • 举报
回复
对数据库操作时,怎么对这行数据枷锁
  • 打赏
  • 举报
回复
huakairuoshuipan 2016-04-12
进来学习学习
  • 打赏
  • 举报
回复
wgymuise 2016-03-07
引用 189 楼 wgymuise 的回复:
[quote=引用 45 楼 wangjun5159 的回复:] 我这里也有个问题 (*^__^*) 嘻嘻……。 1、关于线程池的优点,有种说法是,线程用完之后,再放进池里,可再利用。但是按照我的理解,线程运行完了后就会销毁,无法再进入“可运行状态”,怎么还能放到池里呢。如果被销毁了,那是不是就证明,线程池需要再创建一个线程。
线程池对任务的调度并不是采用 start(),而是调用 run()方法执行,所有才具备线程池的基础,线程池中的线程是永不停止的,除非线程池的管理机制认为有这个必须,而这些永不停止的线程会调用我们提交任务的run方法,而任务通常都是一个 runnable实现,这会给我们一个假象,就像你说的一样[/quote] 补充一下,我没有读过线程池的源码,以上结论仅仅是基于我个人对线程了解的基础上进行的分析
  • 打赏
  • 举报
回复
wgymuise 2016-03-07
对于多线程这档子事,很多人觉得是一个高大上的东西,高深的东西,确实是这样,多线程上手很容易,精通很难,甚至有些人还没有搞明白:什么是线程安全问题(我碰到过很多这样的人),学多线程不要为了技术而技术,得有实际适用环境,比如socket通信, 有些线程问题不需要我们显式创建多线程环境,比如对一个共享资源的访问控制,有的线程问题是为了解决系统处理的吞吐量,这种环境可能根本不需要考虑什么资源共享,总而言之,没有完全理解线程这玩意儿之前,不建议盲目的做相关的尝试,难就难在这玩意儿只能意会不能言传,再牛的人,比喻再好,也没有法把这个说的通俗易懂,因为有些人没有线程的概念。
  • 打赏
  • 举报
回复
wgymuise 2016-03-07
引用 45 楼 wangjun5159 的回复:
我这里也有个问题 (*^__^*) 嘻嘻……。 1、关于线程池的优点,有种说法是,线程用完之后,再放进池里,可再利用。但是按照我的理解,线程运行完了后就会销毁,无法再进入“可运行状态”,怎么还能放到池里呢。如果被销毁了,那是不是就证明,线程池需要再创建一个线程。
线程池对任务的调度并不是采用 start(),而是调用 run()方法执行,所有才具备线程池的基础,线程池中的线程是永不停止的,除非线程池的管理机制认为有这个必须,而这些永不停止的线程会调用我们提交任务的run方法,而任务通常都是一个 runnable实现,这会给我们一个假象,就像你说的一样
  • 打赏
  • 举报
回复
qq_34061519 2016-02-27
  • 打赏
  • 举报
回复
IvanMaYL 2016-02-22
引用 45 楼 wangjun5159 的回复:
我这里也有个问题 (*^__^*) 嘻嘻……。 1、关于线程池的优点,有种说法是,线程用完之后,再放进池里,可再利用。但是按照我的理解,线程运行完了后就会销毁,无法再进入“可运行状态”,怎么还能放到池里呢。如果被销毁了,那是不是就证明,线程池需要再创建一个线程。
不让线程运行完就行了
  • 打赏
  • 举报
回复
dk_sl 2016-02-08
菜鸟,学习了
  • 打赏
  • 举报
回复
lee322767 2016-02-02
按讚一
  • 打赏
  • 举报
回复
viscent_huang 2016-01-30
引用 182 楼 thewindkee 的回复:
请问: FutureTask 是如何工作的, 原理是什么? java源码看不懂
《Java多线程编程实战指南(设计模式篇)》第6章对此有详细的解释。可以看下infoq上发布的本书样章: Java多线程编程模式实战指南之Promise模式 http://www.infoq.com/cn/articles/design-patterns-promise
  • 打赏
  • 举报
回复
thewindkee 2016-01-28
请问: FutureTask 是如何工作的, 原理是什么? java源码看不懂
  • 打赏
  • 举报
回复
thewindkee 2016-01-28
引用 2 楼 shijing266 的回复:
我先来提几个问题,希望大神解答: 1、如果多个线程同时访问一个资源,例如变量、文件等,时如何保证访问安全的问题 2、线程是可以设置优先级的, 在Thread类中,总计规定了三个优先级,分别为: l MAX_PRIORITY——最高优先级 l NORM_PRIORITY——普通优先级,也是默认优先级 l MIN_PRIORITY——最低优先级 设置之后,线程就会按这个顺序执行么? 有啥安全问题没,如何防护 3、既然存在优先级,那么肯定存在等待问题,如果多个线程一直等待,会不会死锁~
2: 不一定,只是优先级高抢到cpu的几率大一些。 3:如果彼此等待,就会死锁。
  • 打赏
  • 举报
回复
qq_33846488 2016-01-25
支持支持支持
  • 打赏
  • 举报
回复
加载更多回复(169)
相关推荐
发帖
Java

4.9w+

社区成员

Java相关技术讨论
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2015-11-23 10:49
社区公告
暂无公告