JAVA线程总结
X5-j
这个作者很懒,什么都没留下…
展开
-
Java线程总结(一):Thread和Runnable
实现线程的基本方式有两种(当然还有Callable等):一种是继承Thread类,一种是实现Runnable接口。 我们先来看下Runnable和Thread类的部分源码: 明显可以看到: 1.Thread类也是实现了Runnable接口,并且可以通过构造方法传入一个Runnable实例赋值给成员变量target; 2.启动一个线程后,调用的就是Thread类的run方法; 3.如果...原创 2016-09-07 21:02:10 · 478 阅读 · 0 评论 -
Java线程总结(十三):并发包------线程返回结果Callable和 Future
<pre name="code" class="java">package com.ydj; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class CallableAndFutureTest { public sta原创 2016-09-14 00:27:58 · 318 阅读 · 0 评论 -
Java线程总结(十二):并发包------CountDownLatch
package com.ydj; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountdownLatchTest { /** * 好像倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1, * 当到达0时,所有等待者就开始原创 2016-09-14 00:09:10 · 263 阅读 · 0 评论 -
Java线程总结(十一):并发包------CyclicBarrier
package com.ydj; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CyclicBarrierTest { /** ...原创 2016-09-14 00:04:50 · 244 阅读 · 0 评论 -
Java线程总结(十):并发包------两个线程交换数据Exchanger
package com.ydj; import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExchangerTest { /** * 用于实现两个人之间的数据交换, * 每个人在完成一定的事务后想与对方交换数据, * 第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此原创 2016-09-13 23:41:35 · 352 阅读 · 0 评论 -
Java线程总结(九):并发包------控制并发线程数Semaphore
package com.ydj; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class SemaphoreTest { public static void main(String[] args) { ExecutorService service = Executors.newCa原创 2016-09-13 22:57:01 · 348 阅读 · 0 评论 -
Java线程总结(八):并发包------读写锁ReadWriteLock的简单例子详细理解
初次接触ReadWriteLock类时也在网上查了很多资料,很容易了解到ReadWriteLock是读写锁,并且读写锁的机制有以下三个特点: 读锁---读锁 (不互斥) 读锁---写锁 (互斥) 写锁---写锁 (互斥) 什么意思呢? 网上很多资料,直接用这三个特点实现一个缓存的例子进行了讲解,但是对小白来说还有那么一丝丝的迷惑(老鸟忽略),下面就逐一演示: 1. 读锁---读锁 main方法里两个线程都在读数据,在read()方法里已经上了读锁且没有解锁(为了测试) pu原创 2016-09-13 17:33:05 · 1425 阅读 · 0 评论 -
Java线程总结(七):并发包------线程通信condition
package com.ydj; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class condit原创 2016-09-13 16:47:56 · 339 阅读 · 0 评论 -
Java线程总结(六):并发包------线程同步Lock
package com.ydj; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class LockTest { public static void main(String[] args) { // 播放器 final Player player = new Player(); // 线程1 播放 new Thread(new Runna原创 2016-09-13 16:20:02 · 285 阅读 · 0 评论 -
Java线程总结(五):并发包------线程池Executors
package com.ydj; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolTest { public static void main(String[] args) { //1. 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。 ExecutorService threadPool = Execut原创 2016-09-13 15:41:45 · 383 阅读 · 0 评论 -
Java线程总结(四):ThreadLocal实现线程范围的共享变量
ThreadLocal是线程本地变量,能实现线程范围的共享变量,具体概念这里不在概述。我们知道java web中spring的事务管理能将“service的一个方法调用多次dao里的方法”操作数据库保持在同一事物里。话不多说,来模拟一下事务管理来展示ThreadLocal的作用(不是spring源码,相同思想微笑): package com.ydj; import java.util.Random; import java.util.concurrent.locks.Lock; import java.原创 2016-09-13 15:17:58 · 501 阅读 · 0 评论 -
Java线程总结(三):线程之间的通信wait、notify
package ydj.a_tradition; public class Wait_notify { public static void main(String[] args) { final Business business = new Business(); //子线程 说50次,每次说10句话 new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <= 50; i原创 2016-09-11 19:09:26 · 336 阅读 · 0 评论 -
Java线程总结(二):线程的同步方式synchronized
本文将来讨论java多线程的同步机制,我们先假设一个场景用代码来实现这个场景: 一个村里有一个广播站,大家都可以用广播站的“唯一的话筒”广播自己的消息(呵,这个例子。。。相当生硬)。 用代码模拟就是下面的样子: 1. VoiceTube就是话筒,它有一个方法play,将村民的消息一个字一个字的播出来; 2.模拟了两个线程代表两个村民,调用同一个VoiceTube对象的play方法,他们俩都...原创 2016-09-08 15:35:57 · 285 阅读 · 0 评论 -
Java中的父线程与子线程
原文:点击跳转 以前在学习操作系统的时候,一直记得的父线程死后,子线程也消失了。然而今天在查资料中,发现有点疑惑,在此记录一下。 Java编写的程序都运行在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。 每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是...转载 2018-10-30 00:28:02 · 5940 阅读 · 0 评论