Java 原生支持并发,基本的底层同步包括:synchronized,用来标示一个方法(普通,静态)或者一个块需要同步执行(某一时刻,只允许一个线程在执行代码块)。volatile,用来标识一个变量是共享变量(线程不缓存),更新和读取是原子的。wait,线程等待某一个Object上的事件(notif...
分类:
编程语言 时间:
2015-11-09 01:34:48
阅读次数:
237
问题:Servlet是如何工作的?Servlet 如何实例化、共享变量、并进行多线程处理?假设我有一个运行了大量Servlet的 web 服务器。通过Servlet之间传输信息得到Servlet上下文,并设置 session 变量。现在,如果有两名或更多使用者向这个服务发送请求,接下来 sessio...
分类:
编程语言 时间:
2015-11-04 11:25:26
阅读次数:
341
1.为什么要用非阻塞算法?我们知道为了避免并发环境下操作共享变量的问题,可以采用同步(synchronize)和锁(Lock)的方式做到线程安全,但是JVM处理锁竞争时对于竞争失败的线程采用的是挂起稍后调度的策略,这样会带来额外的线程上下文切换成本。同时和CAS(Compare And Set)这种...
分类:
编程语言 时间:
2015-11-03 10:35:30
阅读次数:
251
Runnable是执行工作的独立任务,但是它不返回任何值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。一、Runnablejava....
分类:
其他好文 时间:
2015-10-21 23:53:56
阅读次数:
380
1.问题描述: 某个类有2个方法func1(),func2(),有threadCount个线程,要求所有线程执行完func1(),再执行func2()。2.分析: 1)所有线程的func1()执行完的标准是什么? 2)线程之间怎样共享变量?3.代码实现 1)源代码:/** * */pack...
分类:
编程语言 时间:
2015-10-15 15:39:02
阅读次数:
213
深入分析Volatile的实现原理引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程改动一个共享变量时,另外一个线程能读到这个改动的值。它在某些...
分类:
其他好文 时间:
2015-10-14 14:03:51
阅读次数:
182
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存,这样两个不同的线程在访问同一个共享变量的值时,始终看到的是同一个值。java语言规范指出:为了获取最佳的运行速度,允许线程保留共享变量的副本,当这个线程...
分类:
其他好文 时间:
2015-10-12 14:24:11
阅读次数:
206
在matlab中一个.m文件中可以有多个的子函数,但仅能有一个主函数,并且M文件名必须和主函数相同在一个m文件中通常有两种定义子函数的方法:1.嵌套定义myfunc1会和主函数共享变量名。这种情况下,使用相同的变量名,如果不是故意为之,就不合适了。functionmainFunc(...a=myfu...
分类:
其他好文 时间:
2015-09-28 22:27:28
阅读次数:
208
线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。我们定义四类(有相交的)线程不安全函数。 第1类:不保护共享变量的函数 将这类线程不安全函数变为...
分类:
编程语言 时间:
2015-09-28 16:16:35
阅读次数:
273
一、锁的基本原理多个线程同时对共享的同一数据存取 ,在这种竞争条件下如果不进行同步很可能会造成数据的讹误。例如:有一个共享变量int sum=0, 一个线程正调用 sum+=10,另一个线程正好也在调用sum+=20,期望的结果应该是sum=30。 但是+=操作并不是原子的,虚拟机需要用多条指令才能...
分类:
编程语言 时间:
2015-09-17 06:24:12
阅读次数:
317