java多线程
文章平均质量分 68
朱智文
不求大富大贵,但求一路常青
展开
-
java 线程死锁
多线程死锁问题前天俺们谈到了加锁(线程同步),但是在使用加锁的同时又会带来一个问题,就是死锁。什么叫死锁?所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁的原因一般是两个对象的锁相互等待造成的。那么为什么会产生死锁呢?1.因为系统资源不足。2.进程运行推进的顺序不合适。 3转载 2015-12-09 10:53:08 · 287 阅读 · 0 评论 -
如何中断线程
stop方法会立即中断一个正在运行的线程,线程的thread.interrupt()方法是中断线程,将会设置该线程为中断状态,即设置为true;但不一定会立即中断如果他不会立即中断,那怎样判断他是否已经中断了呢?:使用使用Thread.currentThread().isInterrupted(),isInterrupted()判断某线程已被断 断返回true否则返回false转载 2015-12-09 10:42:54 · 448 阅读 · 0 评论 -
中断线程
中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程为中断状态,即设置为true。线程中断后的结果是死亡、还是等待新的任务或是继续运行至下一步,取决于这个程序本身。线程会不时地检测这个中断标识位,以判断线程是否应该被中断(中断标识值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被中断,请使转载 2015-12-08 23:06:17 · 395 阅读 · 0 评论 -
ReentrantLock代码剖析之ReentrantLock.lock
ReentrantLock是java.util.concurrent.locks中的一个可重入锁类。在高竞争条件下有更好的性能,且可以中断。深入剖析ReentrantLock的源码有助于我们了解线程调度,锁实现,中断,信号触发等底层机制,实现更好的并发程序。先来看ReentrantLock最常用的代码lockpublic void lock() { sync.lo转载 2015-12-08 22:57:14 · 358 阅读 · 0 评论 -
线程锁--普通锁 Lock lock = new ReentrantLock();
在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口Condition、Lock、ReadWriteLock。Condition: Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然转载 2015-12-14 21:51:19 · 6370 阅读 · 0 评论 -
Java多线程-新特征-锁(下)
在上文中提到了Lock接口以及对象,使用它,很优雅的控制了竞争资源的安全访问,但是这种锁不区分读写,称这种锁为普通锁。为了提高性能,Java提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,在一定程度上提高了程序的执行效率。Java中读写锁有个接口java.util.concurrent.locks.ReadWriteLock,也有具体的实现ReentrantReadWrit转载 2015-12-14 22:03:42 · 374 阅读 · 0 评论 -
线程池
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习过程。目前有转载 2015-12-14 22:51:46 · 388 阅读 · 0 评论 -
wait()和sleep()的区别
这两者的施加者是有本质区别的. sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.而wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",转载 2015-12-10 10:41:56 · 304 阅读 · 0 评论 -
同步方法的几种常见写法
同步的位置分三种:(1)静态方法的同步,(2)非静态方法的同步,(3)代码块的同步静态方法的同步: public static synchronized void check(){ int i =0; while(i>100){ try { System.err.println("栈满了");原创 2015-12-10 11:11:43 · 1653 阅读 · 0 评论 -
java线程
调用thread.start()方法,是让线程处于可运行状态让线程暂时离开运行状态的三中方法:1、调用线程的sleep()方法,使线程睡眠一段时间2、调用线程的yield()方法,使线程暂时回到可运行状态,来使其他线程有机会执行。3、调用线程的join()方法,使当前线程停止执行,知道当前线程中加入的线程执行完毕后,当前线程才可以执行。理解 线程的yield()方法:让原创 2015-10-26 18:29:00 · 705 阅读 · 1 评论 -
Java线程中run和start方法的区别
Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;package com.ljq.test;public class ThreadTest { /** * 观察转载 2015-12-06 21:47:31 · 1212 阅读 · 0 评论 -
threadLocal的理解
Threadlocal 又成线程局部变量,他为每一个使用该线程局部变量的线程提供了一个变量副本,使每一个线程都可以独立的改变自己的副本,不会和其它线程的副本冲突存放在actionContext里的数据都存放在ThreadLocal里,threadLocal支队当前线程可见,因此它是线程安全的下面看看actionContext里有那先数据:public class ActionCon原创 2015-11-08 13:43:33 · 363 阅读 · 0 评论