
java-并发
文章平均质量分 66
li563868273
个人主页:lizhao.pw
展开
-
线程中的的资源(二)
在有关java中的讨论中,一个常不正确地知识是“原子操作不需要进行同步控制”。原子操作是不能被线程调度机制中断的操作;一旦操作开始,那么它一定可以在可能发生的“上下文切换”之前执行完毕。 原子性可以应用于除long和double之外的所有基本类型之上的“简单操作”。对于读取和写入这些基本类型变量这样的操作,可以保证它们会被当作不可分的操作来操作内存。但是JVM可以将64位(long和double变原创 2015-11-21 14:41:11 · 416 阅读 · 0 评论 -
ReentrantLock详解
ReentrantLock是java1.5之后新增加的可重入锁,他也可以定时,公平。 在ReentrantLock中维护了一个Sync的对象,这就是我们重点需要分析的对象。 在ReentrantLock的lock中有如下代码public void lock() { sync.lock(); }继续进入sync.lock()的方法abstract void lock();一原创 2016-03-26 12:01:13 · 489 阅读 · 1 评论 -
解密ThreadLocal
概述相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知!看看JDK中的源码是怎么写的:This class provides thread-local var转载 2015-12-07 16:39:22 · 283 阅读 · 0 评论 -
Servlet的单例实现多线程
Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例); 2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参转载 2015-12-03 17:37:06 · 433 阅读 · 0 评论 -
基本的线程机制(三)
4.休眠 对于休眠我们这里会详细讨论sleep()方法和yield()方法,wait()方法暂时不讨论. Thread.sleep():public static native void sleep(long millis) throws InterruptedException;是Thread类中的一个静态方法,该方法会让当前正在原创 2015-11-19 14:20:03 · 419 阅读 · 0 评论 -
Thread.UncaughtExceptionHandler(为每一个Thread对象加一个异常处理器)
Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使使用try…catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。 JDK5.0之前,不能为单独的Thread设置UncaughtExceptionHandler,转载 2015-11-19 14:57:22 · 471 阅读 · 0 评论 -
基本的线程机制(二)
2.Thread类 将Runnable对象转变为工作任务的传统方式是把他提交给一个Thread构造器,如下public class BasicThreads { public static void main(String[] args) { Thread thread=new Thread(new Liftoff()); thread.start(原创 2015-11-19 13:23:28 · 483 阅读 · 0 评论 -
基本的线程机制(总结)
在think in java中,作者提到: Thread类自身不执行任何操作,它只是驱动赋予它的任务,但是线程研究中总是不变地使用“线程执行那项或这项”这样的语言。因此,你得到的印象就是“线程就是任务”,当我第一次碰到java线程时,这种印象非常强烈,尤其是Runnable接口的名字非常糟糕,应该叫TASK。在我看来:我们需要搞清楚任务和线程之间的关系,不要被混淆,有时描述的时候可能更多的是要原创 2015-11-19 14:44:16 · 467 阅读 · 0 评论 -
Callable,Runnable比较及用法
编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有三种方法,Thread,Runnable,Callable.Runnable和Callable的区别是,(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得(3)call方法可以抛出异常,ru转载 2015-11-19 14:28:30 · 362 阅读 · 0 评论 -
基本的线程机制(一)
java编程思想中说道:并发编程使我们可以将程序划分为多个分离的,独立运行的任务。通过使用多线程机制,这些独立任务(也被称为子任务)中的每一个都将由执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务,但是你的程序使得每个任务都好像有其自己的cpu一样。其底层机制是切分cpu时间,通常程序员不需要考虑他。 针对以上提出,可以分为任务,执行线程,原创 2015-11-19 12:36:06 · 412 阅读 · 0 评论 -
BlockingQueue解析
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法了,而不能直接访问LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接转载 2015-12-12 10:55:13 · 360 阅读 · 0 评论 -
Java并发包中的同步队列SynchronousQueue实现原理
介绍Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为转载 2015-12-12 11:08:52 · 659 阅读 · 0 评论 -
线程中资源(一)
对于单线程来说,因为只有一个实体,所以永远都不需要担心“两个实体同时使用同一个资源会发生什么”这样的问题。 有了并发就可以同时做多件事情了,但是两个或多个线程彼此互相干涉的问题也就出现了。这就是我们将要讨论的事 1.不正确地访问资源 如果几个线程同时读一个资源,此时不会更改资源,这时也不会需要考虑这个资源竞争这个问题。但是一旦涉及到写操作,这便会涉及到竞争资源这个问题,这时原创 2015-11-19 16:31:02 · 567 阅读 · 0 评论 -
阻塞
终结任务在阻塞时终结 sleep()可以让执行状态变为被阻塞状态,而有时你必须终止被阻塞的任务。 线程状态:一个线程可以处于四种状态之一:1:新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。2:就绪(Runnable)原创 2015-11-21 14:41:56 · 495 阅读 · 0 评论 -
异步化,你的高并发大杀器
今天来聊聊如何让项目异步化的一些事。1.同步和异步,阻塞和非阻塞同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈,当时常常还是有很多同学分不清楚,以为同步肯定就是阻塞,异步肯定就是非阻塞,其他他们不是一回事。同步和异步关注的是结果消息的通信机制 - 同步:同步的意思就是调用方需要主动等待结果的返回 - 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态...原创 2018-07-17 01:09:50 · 3008 阅读 · 3 评论