并发线程
喝醉的咕咕鸟
每天学一点,进步一点点
展开
-
多线程学习--等待/通知机制
等待/通知机制:多个线程彼此之间进行交互与线程之间的依赖,一个线程等待这其他线程的唤醒。实现方式:wait()/notify()/notifyall(). wait():使当前的执行代码的线程进行等待,wait()是Object类中的方法,该方法用来将当前线程置入“预执行队列”中,并且在wait()所在的代码行处停止执行,直到节到通知或 中断为止。同时在调用该方法之前,线程必须获...原创 2019-01-26 17:16:41 · 339 阅读 · 0 评论 -
多线程学习--守护线程
守护线程(Daemon):是为其他线程服务的。在java中的线程分为两类:用户线程和守护线程。守护线程(Daemon)是一种特殊的线程,它的特性有“陪伴”的含义,当进程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程,当进程中没有非守护线程了,则垃圾回收线程也就没有存在的必要了,自动销毁。守护线程实现方式: setDaemon(boolean on);...原创 2019-01-25 12:28:01 · 234 阅读 · 0 评论 -
多线程学习--Volatile关键字/原子性/CAS算法
内存可见性( Memory Visibi lity): 当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。 可见性错误是指当读操作与写操作在不同的线程中执行时,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。 我们可以通过同步...原创 2019-01-30 16:10:36 · 207 阅读 · 0 评论 -
多线程学习--Lock
Java多线程中国,可以使用synchronized关键字来实现线程之间的同步互斥,但是在jdk5之后新增加了lock也能达到同样效果,并且在扩展功能上也更加强大,比如具有嗅探锁定,多路分支通知等功能。lock实现同步方式:public class Myservice { private Lock lock=new ReentrantLock(); publ...原创 2019-01-26 17:17:34 · 168 阅读 · 0 评论 -
多线程学习--sleep/wait/yield
wait()是一个用于线程同步的t通信方法。因为它定义在java.lang.Object上,所以可以在任何对象上调用, 但只能从同步块中调用。它释放对象上的锁,以便另一个线程可以跳入并获取锁,进行线程之间的彼此通信。 Thread.sleep()是可以从任何上下文调用的静态方法。Thread.sleep()暂停当前线程,不释放任何锁。区别:sleep()是Thread类的s...原创 2019-01-26 17:15:46 · 173 阅读 · 0 评论 -
多线程学习--join
join:等待线程对象的销毁。在大多数情况下,主线程创建并启动了子线程,如果子线程中要进行大量的耗时运算,主线程往往将早与子线程结束之间结束。这时,如果主线程想等待子线程执行完成之后在结束,这时候就用到了阻塞功能。join()阻塞当前线程A,使join所属的线程对象B正常执行run()方法,执行完在继续当前线程A后面的代码.案例:public class Runjoin ...原创 2019-01-26 17:16:32 · 174 阅读 · 0 评论 -
多线程学习--创建线程
线程的构造函数:public Thread(); public Thread(Runnable target); public Thread(String name); public Thread(Runnable target, String name); public Thread(ThreadGroup group, Runnable target); public Thre...原创 2019-01-25 12:28:17 · 172 阅读 · 0 评论 -
多线程学习--线程优先级
线程的优先级:继承性,规则性,随机性 线程的优先级具有继承性. 如,线程A启动线程B,则B和A优先级一样 线程的优先级具有规则性. CPU尽量倾向于把资源优先级高的线程 线程的优先级具有随机性. 优先级不等同于执行顺序,二者关系不确定优先级范围:0~10 继承性:class MyThread extends Thread { @Override public ...原创 2019-01-26 17:15:53 · 202 阅读 · 0 评论 -
多线程学习--synchronized锁重入
synchronized锁重入:关键字synchronized拥有锁重入的功能,就是在使用synchronized时候,当一个线程得到一个对象锁后,在此请求此对象锁时是可以再次获取到该对象锁的,这说明了一个synchronized方法/块的内部调用本类的其他synchronized方法/块时,是永远可以得到锁的。 可重入锁概念:自己可以再次获取自己内部锁。比如由1条线程获取...原创 2019-01-26 17:16:00 · 233 阅读 · 0 评论 -
多线程学习--异常,锁自动释放/同步不具继承性
出现异常,锁自动释放:public class Service { synchronized public void testMethod() { if (Thread.currentThread().getName().equals("a")) { System.out.println("ThreadName=" + Thread.curre...原创 2019-01-26 17:16:19 · 200 阅读 · 0 评论 -
多线程学习--终止线程
终止线程:将当前正在运行的线程进行停止。通常停止一个线程使用的是Thread.interrupted(),但是这个方法不会终止一个正在运行的线程。还需要加入一个判断进行控制线程的停止。在Java中有以下3种方法可以终止正在运行的线程:(1)使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 (2)使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和s...原创 2019-01-26 17:15:38 · 188 阅读 · 0 评论 -
Java基础12-多线程
1.三个相关概念程序(Program):为完成某个指定的任务/功能,而用某种编程语言(例如,C,C++,Java等)编写的一组指令的集合进程:Process程序的一次运行线程Thread:在进程中的一条执行路径 线程是CPU调度的最小单位2.什么时候需要开启多线程 多个任务同时进行例如,另起一个线程,做一下比较耗费资源,一般在连接网络下载,获取资源时3.实现多...原创 2018-11-06 08:53:13 · 150 阅读 · 0 评论 -
多线程学习-01
1.程序、进程、线程概念程序(Program):为了完成某个特定的任务、功能,而用某种编程语言编写的一组指令的集合。(静止的代码)进程(Process):操作系统调度程序,是程序的一次运行,是正在运行的一个程序。(运行中代码) 如果一个程序运行两次,就会有两个进程。 在操作系统中,进程是资源分配、调度和管理的最小单位。每个进程在内存中是独立的。线程(Thread):线程...原创 2018-11-11 15:08:35 · 342 阅读 · 0 评论 -
说说-程序运行过程中只有一个对象-单例模式
立即加载/"饿汉模式": 使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化。而立即加载从中文的语境来看,有“着急”、“急迫”的含义,所以也称为“饿汉模式”。/** * 缺点:不能有其他实例变量 * getInstance()方法没有同步,可能出现非线程安全问题 */public class MyObject0 { private stat...原创 2018-12-28 14:31:17 · 149 阅读 · 0 评论 -
多线程学习--线程通信
线程彼此通信会涉及到等待/通知,其最经典的案例就是“生产者/消费者模式”。原理都是基于wait/notify的。一生产一消费://消费者class Consumer { private String lock; public Consumer(String lock) { super(); this.lock = lock; ...原创 2019-01-26 17:17:12 · 207 阅读 · 0 评论 -
多线程学习--管道/交叉线程
管道进行线程通信-字节流: 管道进行线程通信使用的pipeStream流。一个线程发送数据到管道,另一个线程从输入管道中读取数据。 JDK提供了4个类来世线程间可以进行通信: 字节流:PipedInputStream与PipedOutputStream 字符流:PipedWriter,PipedReader 字节流案例:...原创 2019-01-26 17:17:25 · 304 阅读 · 0 评论 -
多线程学习--读写锁
读写锁(ReentrantReadWriteLock):具有互斥排他效果,即同一时间只有一个线程在执行锁后面的任务,这种效率比较搞。 读锁也称为共享锁,写锁也称为排他锁。多个读锁之间不互斥,读锁与写锁互斥,写锁与写锁互斥。在没有线程Thread进行写入操作时,进行读取操作的多个线程都可以获取读锁,而进行写入操作的线程只有在获取写锁后才能进行写入操作。 同一时刻只允许一个线程进...原创 2019-01-30 16:11:19 · 115 阅读 · 0 评论 -
多线程--线程状态
线程对象在不同的运行期间有不同的状态,准确的把握线程状态,能更好的去控制线程的运行,其状态信息就保存在Thread类中的枚举State中。/** * A thread state. A thread can be in one of the following states: * <ul> * <li>{@link #NEW}<b...原创 2019-01-30 16:11:11 · 130 阅读 · 0 评论 -
多线程--线程组
线程可以归属到某个线程组中,线程组可以有线程对象,也可以有线程组,组中还可以有线程。线程组的结构形式类似与树形结构。 线程组:可以批量的管理线程或者线程组的对象,可以有效的对线程或线程组对象进行组织管理。单级关联:父中有子。多级关联:父中有子,子中有子,子子无穷尽。单级关联:public static void main(String[] args) { ...原创 2019-01-30 16:11:03 · 211 阅读 · 0 评论 -
多线程--线程八锁
线程八锁:理解锁的关键。案例分析:1 标准访问,先打印吃鸡还是LOL2 新增Thread.sleep(4000),先打印吃鸡还是LOLclass Game{ public synchronized void getChicken() throws Exception { //TimeUnit.SECONDS.sleep(4); 第二种情况时候需要放...原创 2019-01-30 16:10:45 · 233 阅读 · 2 评论 -
多线程学习-03
线程通信生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个(多个)共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区...原创 2018-11-11 15:08:55 · 157 阅读 · 0 评论 -
多线程学习-02
线程安全问题与线程同步1、什么是线程安全问题之前学习常用类时: StringBuffer与StringBuilder ArrayList与Vector HashMap与Hashtable和上一篇的卖票问题,出现负数票导致线程安全问题:多个线程访问同一份资源问题出现总结:1、多个线程2、共享数据3、多条语句访问或操作共享数据2、如何解决线程安全问题解决思路: ...原创 2018-11-11 15:08:48 · 138 阅读 · 0 评论 -
CountDownLatch--闭锁
CountDownLatch :闭锁,在完成某些运算是,只有其他所有线程的运算全部完成,当前运算才继续执行。 Java5.0在javautil.concurrent包中提供了多种并发容器类来改进同步容器的性能。CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直...原创 2019-01-30 16:10:29 · 164 阅读 · 0 评论