java多线程
骑龟的狗
菜的抠脚
展开
-
多线程学习-----线程同步(四)
两个线程要执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象,锁是上在代表要操作的资源类的内部方法中的,而不是在线程代码中, 问题:子线程循环10次,回到主线程执行100次,接着又回到子线程执行10次,再回到主线程执行100次,如此循环50次,该如何实现? public class ThreadCommunicationStudy { public static vo...原创 2018-10-28 15:25:59 · 130 阅读 · 0 评论 -
多线程学习---Semaphore
1.概述 Semphore可以维护当前访问自身的线程个数,并提供了同步机制。可以控制实现同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 代码实例: public class SemphoreStudy { public static void main(String[] args) { ExecutorService executorService = Executor...原创 2018-11-05 17:54:49 · 128 阅读 · 0 评论 -
Java多线程学习---Condition和wait、notify(十三)
1.问题:实现两个线程交叉执行(Condition和wait、notify都可以实现) public class ConditionStudy { public static void main(String[] args) { //线程代码 BussinessTest b = new BussinessTest(); new Thread(new Runnable() ...原创 2018-11-04 16:31:38 · 717 阅读 · 0 评论 -
多线程学习-----Exchanger
1.概述 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据 2.代码示例 public class ExchangerStudy { public static void main(String[] args) { ExecutorService es = Executors.new...原创 2018-11-06 18:03:15 · 120 阅读 · 0 评论 -
多线程学习--------CountDownLatch
1.概述 犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数到达0时,则所有等待者开始执行。 2.代码示例 public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); Co...原创 2018-11-06 17:46:23 · 121 阅读 · 0 评论 -
多线程学习----读写锁的使用(十二)
读写锁 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,写锁和写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但是不能同时写,那就让读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁! 读写锁的应用: 假设开启三个线程写数据,三个线程读数据(读读不互斥,读写互斥,写...原创 2018-11-01 13:48:32 · 196 阅读 · 0 评论 -
多线程学习-----------线程之间的通信(三)
线程安全问题(demo:银行转账):多个线程操作相同一个数据的时候就会出现线程安全问题。 程序举例: public class SynchronizedStudy { class Output{ public void printName(String name){ for(int i = 0;i < name.length();i++){ System....原创 2018-10-27 15:55:09 · 148 阅读 · 0 评论 -
多线程学习----线程池(九)
1.固定线程池 创建一个线程池,里边放三个线程,创建十个任务,让三个线程谁有空闲谁去执行这十个任务,直到任务结束。 public class ThreadPoolStudy { public static void main(String[] args) { //创建一个装有三个线程的线程池 ExecutorService threadPool = Executors.ne...原创 2018-10-30 11:49:31 · 231 阅读 · 0 评论 -
多线程学习----定时器(二)
1.创建一个定时器,执行某个任务,第一次执行在10s钟以后,之后每隔1s钟执行一次。 new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bombbang"); } }, 10000,1000); schedule方法,第一个参数为要执...原创 2018-10-27 13:44:14 · 173 阅读 · 0 评论 -
多线程学习---线程锁的应用(十一)
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须使用同一个Lock对象。锁是上在代表要操作资源的类的内部方法中,而不是线程的代码中! 示例代码: public class LockStudy { public static void main(String[] args) {...原创 2018-10-31 17:59:50 · 226 阅读 · 0 评论 -
多线程学习---Callable和Future的使用(十)
1.Callable和Future适用于带有返回结果的多线程 示例 public class CallAndFutureStudy { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<...原创 2018-10-31 17:29:29 · 170 阅读 · 0 评论 -
多线程学习(一)
1.创建好线程,然后去找代码执行,执行的是run方法。 创建线程两种方式 第一种: 创建子类重写Thread的run方法 //第一种创建线程方法 Thread thread = new Thread(){ @Override public void run() { //要执行的代码 while(true){ try { Thread.sleep(500); ...原创 2018-10-26 22:02:54 · 130 阅读 · 0 评论 -
多线程学习-----线程并发库(八)
AtomicInteger:实现多线程对共享Integer数据类型变量的同步。 AtomicIntegerArray: 实现对Integer数组某个元素的同步。 AtomicIntegerFieldUpdater:实现对某个类里的整数同步。 。。。。。。 java.util.concurrent.atomic包中的类,可以对基本数据,数组中的基本数据,对类中的基本数据进行操作。...原创 2018-10-29 21:06:58 · 131 阅读 · 0 评论 -
多线程学习(七)
问题 1.卖票系统(如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据) 解决 public class MultiThreadShareDataStudy { public static void main(String[] args) { TicketSystem t1 = new TicketSystem(); new...原创 2018-10-29 14:00:38 · 108 阅读 · 0 评论 -
多线程学习-----ThreadLocal使用(六)
一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。这句话从字面上看起来很容易理解,但是真正理解并不是那么容易。 我们还是先来看一个例子: class ConnectionManager { ...转载 2018-10-28 21:00:36 · 128 阅读 · 0 评论 -
多线程学习----线程范围内的共享数据(五)
线程范围内的共享变量举例: 创建三个线程,它们都访问了三个对象,第一个对象设置值,第二三个对象取值,同一个线程设置的值,只能被相同的线程获取, public class ThreadScopeShareDataStudy { private static int data = 0; private static Map<Thread,Integer> dataMap ...原创 2018-10-28 20:15:48 · 173 阅读 · 0 评论 -
多线程学习---CyclicBarrier
1.概述: 表示大家彼此等待,大家集合好后才出发,分散活动后又在指定地点碰面,这就好比整个公司的人员利用周末集体出去郊游一样,先各自从家出发到公司集合后,再同时出发到公园游玩,在指定地点集合后再同时开始就餐,。。。 2.代码实例(跑步比赛) public class CyclicBarrierStudy { public static void main(String[] args) ...原创 2018-11-05 19:19:55 · 156 阅读 · 0 评论