
多线程及并发
eff666
这个作者很懒,什么都没留下…
展开
-
多线程——java实现多线程的方式
1、线程和进程 要理解多线程,我们必须首先弄清楚线程和进程的概念。在上一篇博文总已经较为详细的介绍过,本篇博文只做总结。进程就是运行的程序,每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。线程是程序执行的最小单位,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。线程和进程可以分为五个阶段:创建、就绪、运原创 2016-12-10 18:58:06 · 1011 阅读 · 0 评论 -
并发编程——原子性,可见性和有序性
在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。1、原子性即一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。原子性就像数据库里面的事务一样,他们是一个团队,同生共死。一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。试想一下,如果这2个操作不具原创 2017-03-26 11:38:35 · 14220 阅读 · 3 评论 -
关于进程和线程的一点理解
1、线程和进程 (1)进程是运行中的程序,拥有自己独立的内存空间和资源; (2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程; (3)线程是最小的处理单位,多个线程共享一块内存和资源; (4)当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变。 2、多线程 线程的最主要功能是多任务处理,即多线程。原创 2016-08-14 15:11:38 · 463 阅读 · 0 评论 -
有状态对象和无状态对象
1、线程安全 要搞清楚有状态对象和无状态对象,首先需要弄清楚线程安全的问题。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,那么就是线程安全的。 或者说,一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不原创 2016-09-10 16:02:09 · 7922 阅读 · 9 评论 -
多线程中ThreadLocal的理解
1、理解ThreadLocal 在多线程开发的过程中可能会有这样的需求,有些变量或者对象在同一个线程中是共享的,在不同的线程中是隔离的,如何实现? (1)下面的这个例子是演示了在多线程的环境下不同的业务对象使用相同的对象数据时出现了错乱:public class ThreadSingleton { public static Integer data; public static原创 2016-09-04 16:07:24 · 729 阅读 · 0 评论 -
Java线程锁(一)——wait(),notify(),synchnorized使用
1、synchronized关键字 JAVA的进程同步是通过synchronized()来实现的。需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。 理解了这个,就能理解为什么synchronized(原创 2016-10-12 22:02:41 · 2229 阅读 · 0 评论 -
Java线程锁(二)——循环打印ABC
1、经典例子 对Object.wait(),Object.notify()的应用最经典的例子,应该是三线程打印ABC的问题了吧,这是一道比较经典的面试题(网上关于本面试题很多),题目要求如下: 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。这个问题用Object的wait(),notify()就可以很方便的解决。代码如下原创 2016-10-12 22:21:05 · 1273 阅读 · 2 评论 -
并发编程——线程通信
在说明线程通信前,我们有必要对进程通信进行了解。1、进程通信方法进程间通信的方法主要有以下几种:(1)无名管道( pipe )管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。(2)高级管道(popen)将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。(3)有名管道 (nam原创 2017-03-23 21:00:35 · 516 阅读 · 0 评论 -
并发编程——线程同步
1、什么是线程同步线程同步不是指平常所说的两件事情同时进行。它的目的是使多个线程之间协调工作,而且常常是避免两个线程同时进行某些操作,比如同时访问同一个共享资源。一般来说,同步是通过暂时将会发生冲突操作的某个线程暂停执行(称为阻塞线程),然后等待不会冲突时再继续执行。2、线程同步的情况2.1 多个线程同时访问同一对象时首先,为什么要使用多线程,比如当你的程序中涉及到多个 很多次数的循环时,如果是单线原创 2017-03-23 21:19:22 · 380 阅读 · 0 评论 -
synchronized关键字
1、引言我们知道Java API提供了丰富的多线程机制,但是要想多线程机制能够正常运转,需要采取一些措施来防止多个线程访问相同的资源。为防止出现这样的冲突,只需在线程使用一个资源时为其加锁即可。访问资源的第一个线程加上锁以后,其他线程便不能再使用那个资源,除非被解锁。在Java中,对这种特殊的资源,Java提供了synchronized关键字来防止它们的冲突。用Java中的synchronized关原创 2017-04-08 11:25:29 · 414 阅读 · 0 评论 -
深入分析Volatile的实现原理
1、引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,下面我们将深入分析Voliate的实现原理。2、Volatile定义java编程语言允许原创 2017-03-28 19:30:05 · 8256 阅读 · 3 评论 -
进程介绍及和线程的关系
1、进程的概念 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。简单来说,进程就是cpu调度的最小单位,是应用程序的执行实例。2、进程的状态 由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。 状态之间的转换: 准备就绪的进程,被CPU调度执行,变成运行态; 运行中的进程,进行原创 2016-12-07 18:57:06 · 1296 阅读 · 0 评论 -
线程介绍
1、线程的基本概念 线程是进程中执行运算的最小单位,是进程中的一个实体,是CPU 调度的一个基本单位;线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。2、线程的好处 (1)易于调度。 (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执原创 2016-12-07 18:54:37 · 463 阅读 · 0 评论 -
多线程——java线程方法详细介绍
1、线程调度 1.1 调整线程优先级 Java线程有优先级,优先级高的线程会获得较多的运行机会。Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量:static int MAX_PRIORITY:线程可以具有的最高优先级,取值为10。static int MIN_PRIORITY:线程可以具有的最低优先级,取值为1。static int NORM_PRIO原创 2016-12-10 16:15:04 · 2111 阅读 · 0 评论 -
Nginx负载均衡
1、负载均衡先来简单了解一下什么是负载均衡。单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现。2、测试环境由于没有服务器,所以本次测试直接host指定域名,然后在VMware里安装了三台CentOS。测试域名 :a.comA服务器IP :192.168.5.149 (主)B服务器IP :192.原创 2017-07-09 09:30:49 · 372 阅读 · 0 评论