A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1,多线程解决什么问题?
2,单线程与多线程的区别
3,同步线程与异步线程
4,4,什么是锁,什么情况需要锁?
{:soso_e196:}谢谢了。。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

2 个回复

倒序浏览
1,线程同步控制和单CPU、多CPU是没有关系的,不过concurrent包用到的CAS指令是需要现代CPU支持的。多CPU相对于单CPU的执行效率不是简单的叠加关系,因为不光进程调度需要资源,线程调度也是需要资源的。对于不同的应用场景有不同的选择策略,譬如计算密集型,我们通常在一个有N个CPU的机器上,选择创建N+1个线程来获得最高的利用率。
2,打个比方,单线程就是你去厨房有烧饭又烧菜,一个人来回跑;多线程就是两个人,一个单做饭,一个单做菜。这样的解释应该比纯理论的好理解一点吧?再补充一下,多线程就是一个CPU虚拟了几个CPU,而双核就是实际上就有两个线程了,当然,还可以每个核再去虚拟多个线程(也可以理解成多个流水线吧)
3,线程 和 异步是两个不同的概念.首先说线程, 线程是CUP顺序执行指令的一个调度单位. 一个线程内的指令将会被顺序执行,Ps.跳转指令也是按照时序执行的.多线程,是指同一时刻存在多个调度单位.异步和同步, 举个例子说明异步吧, 我要洗衣服的时候,先打开上水管,然后再去抱脏衣服,在我抱脏衣服的同时,水上好了,上水过程就相当于我打开了一个异步工作.我们实现异步的方法基本上就是使用多线程实现的, 比如一个工作线程每秒更新显示系统时间, 而我又需要计算一个复杂的计算结果,需要耗时两秒,如果在原来的线程中执行计算方法,则无法继续正常执行更新显示系统时间的功能,因为那个代码还没执行完,无法跳转到更新时间的代码.而如果我启动另外一个线程,只需花费0.1秒,然后就可以继续执行更新显示时间的工作了,当新建的计算线程运算完毕以后,将结果返回个原线程,原线程直接将结果更新一下,就可以了. 这个过程就完成了一个典型的利用多线程进行的异步运算.
4,多线程同步的实现最终依赖锁机制。我们可以想象某一共享资源是一间屋子,每个人都是一个线程。当A希望进入房间时,他必须获得门锁,一旦A获得门锁,他进去后就立刻将门锁上,于是B,C,D...就不得不在门外等待,直到A释放锁出来后,B,C,D...中的某一人抢到了该锁(具体抢法依赖于JVM的实现,可以先到先得,也可以随机挑选),然后进屋又将门锁上。这样,任一时刻最多有一人在屋内(使用共享资源)。 Java语言规范内置了对多线程的支持。对于Java程序来说,每一个对象实例都有一把“锁”,一旦某个线程获得了该锁,别的线程如果希望获得该锁,只能等待这个线程释放锁之后。获得锁的方法只有一个,就是synchronized关键字。
锁是防止重复提交,页面刷新那种。 保存数据之后加锁,在保存的方法之间判断是否有锁。。。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报 1 0
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马