java多线程
文章平均质量分 79
我还是个少年
关注公众号chatjava,一起学习java
展开
-
Thread学习(三)多个线程访问共享对象和数据的方式
1.如果每个线程执行的代码相同,可以使用同一个Runable对象,这个Runable对象中有那个共享数据,例如卖票系统就可以这样做。2.如果每个线程执行的代码不相同,这个时候需要用到不同的Runable对象,有如下两种方式实现多个Runable对象中的数据共享。(1)将共享数据封装在另一个对象中,然后将这对象逐一传递给各个Runable对象,每个线程对共享数据的操作方法也交给那个对象去进行原创 2016-11-16 10:33:11 · 1350 阅读 · 0 评论 -
开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
这三个线程分别为A,B,C,我们可以把这三个线程当成父,子,孙三个线程,每个线程要循环输出十次。然后要有一个类去完成他们的任务就是输出当前线程的名字,然后我们可以用condition实现三个线程的交替输出。/** * 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C, * 每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示; * 如:ABCABC….依原创 2016-11-25 09:45:15 · 3502 阅读 · 0 评论 -
如何创建线程安全的单例模式?线程安全的Singleton!
单例模式的概念单例模式就是确保只有一个实例,而且自行实例化并向整个系统传递这个实例,这个类就称作为单例类单例模式最重要的一个特点就是构造方法私有化。创建单例模式分为懒汉式和饿汉式。第一种:懒汉式(线程不安全的)传统的懒汉式创建单例模式,是线程不安全的public class Singleton { private static Singleton insta原创 2016-11-24 16:59:35 · 5351 阅读 · 0 评论 -
Thread学习(八) ThreadLocal实现线程范围内的共享变量
什么叫线程范围内的共享数据(线程外独立)?一个线程在运行的时候可以调用A模块,B模块,C模块,就比如我们调用A,B,C三个对象,A,B,C三个模块内部的代码就要访问外面的变量,那么此时如果我们把ABC调用的那个变量设置成static的静态变量,我们也可以实现让ABC同时访问同一个变量,但是如果我们用第二个线程去同时调用ABC去访问这个变量,这时候第二个线程访问到的这个变量就不是刚才我们线程1所原创 2016-11-24 15:13:43 · 4782 阅读 · 0 评论 -
多线程之CountDownLatch和CyclicBarrier的区别和用法
一.CountDownLatch的使用CountDownLatch经常用于监听某些初始化操作,等初始化执行完毕后,再通知主线程继续工作。CountDownLatch定义:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,awai原创 2016-12-05 16:10:11 · 5491 阅读 · 0 评论 -
Thread学习(七) 用读写锁ReadWriteMethod实现个简单的例子,cache缓存的原理
所谓缓存机制其实就是类似一个map,你传入一个key,然后程序会通过你这个key去缓存中找对应的value,如果这个value不存在,那么就去数据库中找这个value,如果此时有多个线程同时访问这个缓存的话就会存在并发的问题,在将要写的时候去读出了数据,在将要读数据的时候进行了写入数据,那么此时我们就应该用到读写锁。public class CacheDemo { public static原创 2016-11-22 14:37:26 · 548 阅读 · 0 评论 -
Thread学习(六)读写锁的学习ReadWriterLock学习
Thread中读写锁读写锁,分为读锁和写锁,多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥,其实很好理解,就是读的时候不能多线程去写,读的时候可以多线程去读,写的时候不能多线程去写。这是由jvm自己控制的,你只要上相应的锁就行了,如果你的代码是只读数据,可以很多人去读,但不能同时写,那就上读锁,如果你的代码修改数据,那就上写锁,只能有一个人在写,不能有人在写得时候读数据。下面我们来看一个关原创 2016-11-22 14:24:05 · 2029 阅读 · 0 评论 -
java自定义线程池--ThreadPoolExecutors
ThreadPoolExecutor类简介在java线程池中的newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor,newScheduledThreadPool这四个线程池在底层都是重写了ThreadPoolExecutor这个方法原创 2016-12-02 16:58:05 · 8824 阅读 · 0 评论 -
多线程之Master-Worker工作模式学习
Master-Worker设计模式介绍Master-Worker模式是常用的并行设计模式。核心思想是,系统由两个角色组成,Master和Worker,Master负责接收和分配任务,Worker负责处理子任务。任务处理过程中,Master还负责监督任务进展和Worker的健康状态;Master将接收Client提交的任务,并将任务的进展汇总反馈给Client。各角色关系如下图原创 2016-12-02 10:02:26 · 3955 阅读 · 0 评论 -
Thread学习(五)Callable与Future的应用
Callable与Future的应用submit提交一个任务 Callable接口代表一段可以调用并返回结果的代码;Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说Callable用于产生结果,Future用于获取结果。 Java 5在concurrency包中引入了Java.util.concurrent.Callable 接口,它和Runnable接口原创 2016-11-19 11:58:49 · 449 阅读 · 0 评论 -
Thread多线程学习(二),java多线程中synchronize锁的使用和学习
synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用。public class TraditionalThreadSynchronized { public static void main(String[] args) {原创 2016-11-15 11:12:36 · 2211 阅读 · 0 评论 -
java多线程学习笔记(一)!更好的理解多线程
1.线程的创建之前知道java中一个多线程的创建方法是继承Thread类或者实现Runable接口,但是看不懂下面这种创建线程的方法第一种new Thread(new Runnable() { @Override public void run() { } } }).start();//这种方式中new Thread()是创建了一个线程,而new原创 2016-11-15 09:56:01 · 1479 阅读 · 2 评论 -
Thread(四)java线程池学习笔记(一)
java线程池什么是线程池?(摘抄自百度知道) 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程池包括以下四个基本组成部分: 1、线程池管理器(ThreadPool):用于原创 2016-11-17 15:59:15 · 689 阅读 · 0 评论 -
Thread学习(十)无缓冲队列synchronousQueue,优先级队列PriorityBlockingQueue
BlockingQueuesynchronousQueue学习SynchronousQueue是无界的,是一种无缓冲的阻塞队列,插入操作必须等待令一个线程取数据,反之亦然(SynchronousQueue是线程安全的,是阻塞的)。同步队列没有任何内部容量,甚至连一个队列的容量都没有。公平模式: SynchronousQueue会采用公平锁,并配合一个FIFO队列来阻塞多原创 2016-11-29 11:47:33 · 786 阅读 · 0 评论 -
Thread学习(九) 并发的Queen学习ArrayBlockingQueue,LinkedBlockingQueue
并发的Queue在并发队列上,JDK实现了两套实现,一套是以ConcurrentLinkedQueue为代表的高性能非阻塞队列,另一套是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典原创 2016-11-29 10:35:50 · 1862 阅读 · 0 评论 -
关注微信公众号chatjava,一起学习java,领取java架构师学习资料
Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池等等等等……所以要想成为一个架构师,道阻且长,但是你要相信你行则将至。1、这套架构师资料适合有基础的同学去学习,所以如果你是刚刚毕业,或者刚刚参加工作,可以先去学习java开发基础,或者直接给我留言,我发java基...原创 2019-03-11 22:34:39 · 485 阅读 · 0 评论