
多线程
文章平均质量分 89
一颗洛米
此生若能得幸福安稳, 谁又愿颠沛流离
展开
-
Java提高——JUC线程原子变量和CAS算法
原子变量类的小工具包,支持在单个变量上解除锁的线程安全编程。事实上,此包中的类可将volatile值,字段和数组元素的概念扩展到那些提供原子条件更新操作的类。类AtomicBoolean、AtomicInteger、AtomicLong和AtomicReference的实例各自提供对相应类型单个变量的访问和更新。每个类也为该类型提供适当的实用工具方法。AtomicIntegerArray、Atom...原创 2018-07-12 09:54:04 · 253 阅读 · 0 评论 -
Java提高——JUC线程同步容器ConcurrentHashMap
ConcurrentHashMapConcurrentHashMap同步容器类是java5增加的一个线程安全的哈希表。对与多线程的操作,介于HashMap与Hashtable之间。内部采用“锁分段”机制代替Hashtable的独占锁。进而提高性能。在java.util.concurrent包下提供了设计用于多线程上下文中的Collection实现:包括ConcurrentHashMap、Concu...原创 2018-07-12 09:54:18 · 278 阅读 · 0 评论 -
Java提高——JUC线程CountDownLatch闭锁
CountDownLatch闭锁java5.0后在java.util.concurrent包中提供了许多种并发容器类来改进同步容器的性能。CountdownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。闭锁可以延迟线程的进度知道其到达终止状态,闭锁可以用来确保某些活动直到其他其他活动都完成才继续执行:1)确保某个计算在其需要的所有资源都被初始化之后...原创 2018-07-12 09:54:29 · 226 阅读 · 0 评论 -
Java提高——JUC线程实现Callable接口和Lock锁
实现Callable接口(实现线程的第三种方式)Java 5.0 在java.util.concurrent提供了一个新的创建执行线程的方式:Callable接口Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable不会返回接口,并且无法抛出经过检查的异常。Callable需要依赖FutureTask,FutureTask也可以用作闭锁...原创 2018-07-12 09:54:43 · 354 阅读 · 0 评论 -
Java提高——JUC线程Condition控制通信通信、阻塞队列
xxxxx原创 2018-07-12 09:58:11 · 195 阅读 · 0 评论 -
Java提高——JUC线程ReadWriteLock读写锁
ReadWriteLock读写锁ReadWriteLock维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有Writer,读取锁可以由多个reader线程同时保持。写入锁是独占的。ReadWriteLock读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。ReadWriteLock能提供比独占锁更高的并发性。而对于只读的数据结构,其...原创 2018-07-12 09:55:04 · 212 阅读 · 0 评论 -
Java提高——JUC线程线程池和线程调度
线程池第四种获取线程的方法:线程池,一个ExecutorService,它使用可能的几个池线程之一执行每个提交的任务,通常使用Executors工厂方法配置 。 线程池可以解决两个不同的问题:1)、由于减少了每个任务调用的开销,他们通常可以在执行大量异步任务的时候提供增强性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。 2)、每个ThreadPoolExecutor...原创 2018-07-12 09:57:57 · 338 阅读 · 0 评论 -
Java提高——JUC线程volatile关键和内存可见性
内存可见性内存可见性:是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态之后,其他线程能够看到发生的状态变化。可见性错误:当读操作与写操作在不同的线程中执行时,我们无法确保执行读操作的线程能实时的看到其他线程写入的值,有时甚至是不可能的事情。我们可以通过对象同步来保证对象被安全的发布。除此之外我们也可以使用一种更加轻量级的volatile变量。class ...原创 2018-07-12 09:53:27 · 220 阅读 · 0 评论 -
Java提高——多线程(一)状态图
操作系统中的进程和线程的概念 进程是指一个内存运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程,比如windows下的一个运行的应用程序.exe就是一个进程。 线程是指进程中的一个执行流,一个进程可以运行多个线程。如java.exe就可以运行很多个线程。线程总是属于某个进程,进程中的多个线程共享进程中的内存。 操作系统中可以同时执行...原创 2018-05-07 16:35:01 · 7996 阅读 · 3 评论 -
Java提高——多线程(二)join、sleep、yield
join、sleep、yield都是Thread类的方法join线程join()方法:让“主线程”线程等待“子线程”运行完之后再运行。//子线程public class son extends Thread(){ void run(){ ...... }}//主线程public class F() extends Thread{ ...转载 2018-05-07 16:35:14 · 226 阅读 · 0 评论 -
Java提高——多线程(三)同步、锁
线程同步线程的同步是为了防止多个线程访问同一个数据对象时,对数据造成破坏。同步的方法就是使用synchronized关键字。每个对象有且仅有一个同步锁,意味着同步锁依赖于对象而存在。每个对象都有一个内置锁,当程序运行到非静态的synchronized同步方法时,自动获得与当前执行的代码类的当前实例(this)有关的锁。当程序运行到synchronized方法时,就获得了该对象的同步锁。不同线程对同...原创 2018-05-07 16:35:26 · 191 阅读 · 0 评论 -
Java提高——多线程(四)线程通信、线程中断、优先级和守护线程
等待&唤醒关于Object类提供的wait、notify、notifyAll三个方法:wait():让当前线程处于等待(阻塞)状态,直到其他线程调用该同步监视器的notify(),notifyAll()方法来唤醒该线程,进入就绪状态。wait()会释放对当前线程的同步监视器的锁定。—>无时间参数的wait:一直等到,直到其他线程通知唤醒—>带时间参数的wait:等待指定时间后自...原创 2018-05-07 16:35:36 · 270 阅读 · 0 评论 -
Java提高——多线程(五)生产消费者问题
生产者/消费者问题是个典型的多线程问题,类似于hello world对于一门编程语言而言,涉及的对象包括“生产者”、“消费者”、“仓库”和“产品”。该模型需要注意以下几点:1、生产者只有在仓库未满的时候生产,仓满则停止生产。2、消费者只有在仓库有产品的情况下才能消费,空仓则等待。3、当消费者发现没有产品时通知生产者生产。4、生产者在生产出可消费的产品时,通知等待的消费者去消费。此模型需要结合Obj...转载 2018-05-07 16:35:46 · 242 阅读 · 0 评论 -
Java提高——JUC原子类
Java的JUC的原子操作类可以分为四类:1、基本类型:AtomicInteger、AtomicLong、AtomicBoolean2、数组类型:AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray3、引用类型:AtomicReference、AtomicStampedReference、AtomicMarkableReference4、对...转载 2018-05-08 20:08:10 · 197 阅读 · 0 评论 -
Java提高——JUC线程ForkJoinPool分支/合并框架
ForkJoinPool分支/合并框架 ForkJoinPool分支/合并框架:就是在必要的情况下,将一个大任务,进行拆分(Fork)成若干个小任务(拆到不可拆时),再将一个个的小任务运算的结果进行join汇总。采用“工作窃取”模式:当执行新的任务的时候,它可以将其拆分成更小的任务执行,并将小任务加到线程队列中,然后再从一个随机线程的队列中偷一个并放在自己的队列中。相对于一般的线程池实现,fork...原创 2018-07-12 09:58:22 · 267 阅读 · 0 评论