随笔分类 -  java 多线程-原理和使用

摘要:引用: 1.http://www.infoq.com/cn/articles/the-importance-of-thread-pool-in-java-web-application --infoQ 线程池调优方案 2.http://www.importnew.com/22554.html --  阅读全文
posted @ 2017-08-27 11:20 积淀 阅读(392) 评论(0) 推荐(0)
摘要:官方文档翻译: 如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(long, int)会让它进入等待(阻塞)状态,或者调用线程的join(), join(long), join(long, int), sleep(long), sleep(long, int)也会让 阅读全文
posted @ 2016-11-03 17:20 积淀 阅读(306) 评论(0) 推荐(0)
摘要:join方法的源码: 给一个例子来理解: 输出结果: 代码运行整个过程说明入下图: 阅读全文
posted @ 2016-11-03 17:08 积淀 阅读(282) 评论(0) 推荐(0)
摘要:线程的概述: 线程是程序的多个执行路径,执行调度的单位,依托于进程存在。线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系统分配的,主要用来保存线程内部的数据,如线程执行函数中定义的变量。 java中多线程是一种抢占机制而不是分时机制。抢占机制 阅读全文
posted @ 2014-08-22 13:12 积淀 阅读(336) 评论(0) 推荐(0)
摘要:wait和sleep区别:相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权。不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间。 2.wait方法必须在同步中使用,但是sleep不一定在同步中使用。 3.在同步中,调用sleep方法释... 阅读全文
posted @ 2014-08-22 11:13 积淀 阅读(407) 评论(0) 推荐(0)
摘要:看API文档介绍几个方法:JDK1.5中提供了多线程的升级解决方案: 特点:1.将同步synchronized显示的替换成Lock 2.接口Condition:Condition替代了Object监视器方法(wait、notify、notifyAll),分别替换成了await(),signal() ... 阅读全文
posted @ 2014-08-22 10:06 积淀 阅读(347) 评论(0) 推荐(0)
摘要:*java多线程--等待唤醒机制:经典的体现"生产者和消费者模型*对于此模型,应该明确以下几点:*1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产。*2.消费者仅仅在有产品的时候才能消费,仓空则等待。*3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产。*4.生产者在生产出可以消费... 阅读全文
posted @ 2014-08-10 22:09 积淀 阅读(351) 评论(0) 推荐(0)
摘要:1.wait和notify,notifyAll:wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中。wait()方法:对此对象调用wait方法导致本线... 阅读全文
posted @ 2014-08-09 22:55 积淀 阅读(462) 评论(0) 推荐(0)
摘要:死锁:是两个或者两个以上的线程被无限的阻塞,线程之间互相等待所需资源。线程死锁产生的条件:当两个线程相互调用Join()方法。当两个线程使用嵌套的同步代码块的时候,一个线程占用了另一个线程的锁,互相等待阻塞,就有可能产生死锁。下面看代码:代码1:死锁的案例package com.lp.ecjtu.T... 阅读全文
posted @ 2014-08-09 11:20 积淀 阅读(219) 评论(0) 推荐(0)
摘要:1.验证同步函数使用的锁----普通方法使用的锁思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证。创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定。假设我们事先不知道同步函数用的是什么锁;如... 阅读全文
posted @ 2014-08-08 21:07 积淀 阅读(315) 评论(0) 推荐(0)
摘要:这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提:* 1.必须要有两个以上的线程,才需要同步。* 2.必须是多个线程使用同一个锁。* 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确... 阅读全文
posted @ 2014-08-06 23:01 积淀 阅读(303) 评论(0) 推荐(0)
摘要:上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题。我们分析为什么会发生多线程安全问题? 看下面线程的主要代码: @Override public void run() { // TODO Auto-generated method stub while(true){ if(ti 阅读全文
posted @ 2014-08-06 17:43 积淀 阅读(548) 评论(0) 推荐(0)
摘要:总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但是实现Runnable接口可以处理同一个资源。 下面我们做个测试:验证下。车站的售票系统售票的例子, 阅读全文
posted @ 2014-08-06 14:48 积淀 阅读(1095) 评论(0) 推荐(0)
摘要:创建线程的第二中方式:/*** 步骤: 1定义类实现Runnable接口 2.实现Runnable接口中的run方法。 3.通过Thread类建立线程对象,并将Runnable 接口的子类对象作为实际参数传给Thread类的构造方法、 4.调用Thread类的start方法开启线程,并调用Runn... 阅读全文
posted @ 2014-08-06 10:49 积淀 阅读(525) 评论(0) 推荐(0)
摘要:创建线程的第一种方式: / * 步骤: * 1.继承Thread类 * 2. 重写Thread的run方法 * 目的:将自定义的代码存储在run方法中,运行自定义线程 * start 1.启动线程,2调用run方法 * 为什么要覆盖run方法? * Threa... 阅读全文
posted @ 2014-08-06 09:48 积淀 阅读(333) 评论(0) 推荐(0)