java多线程
文章平均质量分 71
Oo此岸花开oO
这个作者很懒,什么都没留下…
展开
-
JAVA多线程——死锁分析
线程死锁的原因:当两个或多个线程正在等待对方占有的锁,死锁就会发生死锁会导致两个线程无法继续运行,被永远挂起。线程0想要lock1,线程1想要lock0,双方都在等待对方释放锁简单的死锁例子创建两个互相等待对方释放锁的线程public class DeadLock1 implements Runnable { private Object o1原创 2016-03-29 09:38:53 · 659 阅读 · 0 评论 -
简单的Selenium访问控制线程池
思路:频繁开关phantomJS进程比较耗费资源,所以需要维护一个线程池控制访问以减少内存消耗1. 自定义操作CustomAction接口public interface CustomAction { String action(WebDriver webDriver);}2. WebDriverPool池public class WebDriverPool {原创 2016-08-16 22:51:52 · 5697 阅读 · 0 评论 -
JAVA线程同步——synchronized
问题:如何在多线程环境下安全地共享变量首先理解一个概念:临界区临界区是一个用来访问共享资源的代码块,这个代码块在同一个时间允许一个线程执行JAVA中使用synchronized来声明一个方法或者一段代码块为临界区每个对象只有一个锁,当它被某线程占有了,其他想获取锁的线程就只能阻塞synchronized的语义:1.对象锁在同一个对象的临界区,同一时间只能有一个允许被访问原创 2016-03-27 09:52:47 · 360 阅读 · 0 评论 -
JMM——线程间通信
在并发编程中,我们需要处理两个关键问题:1. 线程之间如何通信 通信是指线程之间以何种机制来交换信息,在命令式编程(c语言)中,线程之间的通信机制有两种: 1.1 共享内存 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。 JAVA并发采用的是共享内存模型,java线程之间的通信总是隐式进行,整个通信过程对程序员完全透原创 2016-03-28 20:16:09 · 1228 阅读 · 0 评论 -
JAVA多线程——notify()和notifyAll()的注意事项
1. - waiting on —— 对应java.lang.Thread.State: WAITING表示线程执行到了锁的wait()方法上由于wait()方法会释放锁,所以当前线程此时处于未获取锁状态,等待notify() || notifyAll()2. - waiting to lock —— 对应java.lang.Thread.State: BLOCKED表示锁已经原创 2016-03-28 13:33:40 · 629 阅读 · 0 评论 -
JAVA多线程开发——线程的创建与运行
JAVA中创建线程的方式有两种:1.实现Runnable接口,使用Thread的参数为Runnable类的构造函数创建Thread对象2.继承Thread类,覆盖run方法线程的启动:直接调用上述Thread或者Runnable的run()方法仅仅是普通的方法调用,并不会真正启动一个线程只有调用start()方法才会创建并启动一个线程实现Runnab原创 2016-03-26 20:42:55 · 400 阅读 · 0 评论 -
JAVA多线程——线程运行时异常的处理
线程异常的处理1. 非运行时异常(Unchecked Exception) 必须捕获并处理,因为run()方法并不支持throws语句2.运行时异常(Runtime Exception) 2.1默认在控制台输出异常信息 2.2设置UncaughtException异常处理器来自定义处理操作异常处理器:实现Thread.UncaughtExceptionHandl原创 2016-03-26 23:20:43 · 5910 阅读 · 0 评论 -
JAVA多线程——线程的休眠和恢复
线程休眠的两种方式:1. Thread.sleep()与锁操作无关,如果该方法恰好在一个锁的保护范围之内,当前线程即使在执行sleep()的时候,仍然继续保持监视锁。 sleep方法实际上仅仅是完成等待或者睡眠的语义2.Object.wait()当线程执行到wait()方法上,当前线程会释放监视锁,此时其他线程可以占有该锁一旦wait()方法执行完成,当原创 2016-03-26 22:29:57 · 3648 阅读 · 0 评论 -
JAVA多线程——线程的中断
JAVA中的线程中断1.Thread.interrupt() —— 设置interrupted为true源码:public void interrupt() { if (this != Thread.currentThread()) checkAccess(); synchronized (blockerLock) {原创 2016-03-26 22:09:51 · 318 阅读 · 0 评论 -
java锁——ReentrantLock
java.util.concurrent.locks.LockLock接口与synchronized的区别:1.Lock接口允许分离读和写操作,允许多个读线程和只有一个写线程2.在高并发的环境下,Lock性能更好3.支持更灵活的同步代码块结构,可以让锁的获取和释放不在同一个代码块使用Lock接口的一般模式: private final Lock lock原创 2016-03-27 14:05:11 · 325 阅读 · 0 评论 -
JAVA线程同步——消费者和生产者模式
场景介绍我们有一个数据缓冲区,一个或者多个生产者把数据存入这个缓冲区,一个或者多个消费者从缓冲区中取出数据缓冲区中的是共享数据当缓冲区满的时候不能生产者将不能再放入数据到缓冲区(生产者线程阻塞)当缓冲区空的时候消费者不能从缓冲区中读取数据(消费者线程阻塞)实例:1. 创建数据处理类,其中缓冲区的保存、读取、生产操作public class EventStorag转载 2016-03-27 13:42:52 · 464 阅读 · 0 评论 -
java线程同步——信号量(Semaphore)
java.util.concurrent.Semaphore信号量是一种计数器,用来保护一个或者多个共享资源的访问,它是并发编程的一种基础工具。信号量通过计数器的方式来对资源进行访问控制当其计数器值大于0时,表示有资源可以访问当其计数器值等于0时,线程将进入休眠状态直到计数器值大于0通过信号量的构造函数指定资源数量:private final Semaphore s转载 2016-03-27 14:55:39 · 862 阅读 · 0 评论 -
java线程同步——CountDownLatch
java.util.concurrent.CountDownLatchCountDownLatch允许线程等待一组在其他线程中执行的操作完成之后才继续执行这个类通过指定一个整数初始化内部计数器,这个整数就是线程要等待完成的操作的数目当一个线程要等待某些操作先执行时,需要调用await()方法让线程进入休眠直到所有操作完成当某一个操作完成的时候,它将调用countDown()方法原创 2016-03-27 15:28:46 · 513 阅读 · 0 评论 -
java多线程——监视锁(monitor)
java中每个对象都有唯一的一个monitor,想拥有一个对象的monitor的话有以下三种方式:1.执行该对象的同步方法public synchronize a () {}2.执行该对象的同步块synchronize(obj) {}3.执行某个类的静态同步方法public static synchronize b(){}tips:拥有monitor的是线程原创 2016-03-28 18:34:15 · 17485 阅读 · 2 评论