博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2018年8月18日

摘要: 类ReentranLock具有万川互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。这样虽然保证了实例变量的线程安全性, 但效率却是非常低下的。所以在jdk中提供了一种读写锁ReentrantReadWriteLock类,使它可以加快运行效率,在某些 阅读全文

posted @ 2018-08-18 18:03 南国木棉 阅读(298) 评论(0) 推荐(0) 编辑

摘要: 公平与非公平锁:锁lock分为 公平锁和非公平锁,公平锁表示现场获取锁的顺序是按照线程加锁的顺序来分配的, 即先来先得的FIFO先进先出顺序。而非公平锁就是一种获取锁的抢占机制,是随机获得的锁的,和公平锁不一样的就是先来 不一定先得到锁,这个方式可能造成某些线程一直拿不到锁。 首先来验证公平锁:创建 阅读全文

posted @ 2018-08-18 11:30 南国木棉 阅读(530) 评论(1) 推荐(1) 编辑

2018年8月6日

摘要: ThreadLocal ,即线程变量,是一个以ThreadLocal对象为键,任意对象为值得存储接口。这个接口被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。 可以通过set(T)方法来设置一个值,在当前线程下,在通过get()方法获取到原先设置的值 阅读全文

posted @ 2018-08-06 18:28 南国木棉 阅读(250) 评论(0) 推荐(0) 编辑

摘要: 在并发编程中,使用生产者和消费者能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作恩能够力来提高程序整体处理数据的速度。 什么是生产者和消费者模式? 生产者和消费者模式是通过一个容器来解决生产者和消费者强耦合问题。生产者和消费者彼此之间不直接通信。而是通过阻塞队列来进行通信,所以生产者 阅读全文

posted @ 2018-08-06 17:14 南国木棉 阅读(111) 评论(0) 推荐(0) 编辑

2018年8月4日

摘要: 在研究volatile关键字之前,首先看一段代码。 主线程 控制台: 可以发现,线程并未停止。本人使用的运行环境的jdk1.8 64位,win10 64。 出现这个问题的原因是私有堆栈中的值和公共堆栈中的值不同步造成的。解决这样的问题就要使用volatile关键字。 volatile:当线程访问is 阅读全文

posted @ 2018-08-04 11:22 南国木棉 阅读(640) 评论(0) 推荐(0) 编辑

摘要: 首先看百度百科上的死锁的概念 死锁:死锁是指两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力,他们都将无法推进下去。 此时成系统处于死锁状态,或者系统产生了死锁,这些永远在互相等待的进程成为死锁进程。 Java中的线程可以理解为一个小的独立的进程。 介绍 阅读全文

posted @ 2018-08-04 10:25 南国木棉 阅读(118) 评论(0) 推荐(0) 编辑

2018年8月2日

摘要: 首先提出问题: 1 当一个类中有多个synchronized方法的时候,多线程访问不同的方法会不会阻塞? 2 synchronized(this)和synchronized(非this 对象x)的区别是什么? 下面我们实验: 为图省事,将两个问题放在一起验证。 定义7个方法,分别在主线程中调用, m 阅读全文

posted @ 2018-08-02 20:20 南国木棉 阅读(461) 评论(0) 推荐(0) 编辑

摘要: 在多线程情况下,当多个线程操作同一个资源的时候,会出现安全问题,例如脏读(一个线程咋读取变量的时候,值已经被另一个线程改变)。 synchronized关键字:可用来同步方法或者代码块。有关synchronized,总结一下几条。 1 synchronized关键字锁的是对象,当多个对象会创建多个锁 阅读全文

posted @ 2018-08-02 19:11 南国木棉 阅读(119) 评论(0) 推荐(0) 编辑

2018年8月1日

摘要: 线程的概念:线程是进程独立运行的子任务。 多线程是异步的。所以,Java代码启动线程的顺序不是线程的执行顺序。 通常实现线程有两种方式。 1 继承Thread类 2 实现Runnable接口。 下面对这两种方法进行验证。 继承Thread类实现 实现Runnable接口实现 主线程 开启两个线程在控 阅读全文

posted @ 2018-08-01 21:29 南国木棉 阅读(645) 评论(0) 推荐(0) 编辑

2018年7月31日

摘要: 线程对象在不同的运行时期有不同的状态,状态信息就存储在State枚举类中。 new : 至今未启动的线程的状态 runnable: 虚拟机中正在运行的状态。 blocked:受阻塞并等待某个监视器的线程处于这种状态。 waiting:无限期的等待另一个线程来执行某一特定操作的线程处于此种状态。 ti 阅读全文

posted @ 2018-07-31 20:11 南国木棉 阅读(177) 评论(0) 推荐(0) 编辑