Java并发
文章平均质量分 71
cosmos_lee
这个作者很懒,什么都没留下…
展开
-
Java多线程总结
参考: http://www.cnblogs.com/wxd0108/p/5479442.html http://blog.csdn.net/evankaka/article/details/44153709 1.线程与进程的区别定义:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是...原创 2018-02-27 17:11:24 · 161 阅读 · 0 评论 -
java原子类和CAS
CAS: Compare-And-Swap, 比较交换。CAS操作需要三个参数: CAS(V,E,N)V: 内存值E:旧的预期值,一个线程间共享的变量,首先主存中会保留一份,然后每个线程的工作内存中也会保留一份副本,即预期值。N:新值只有当 V=E的时候,才会将V设为N。CAS操作是原子性的,所以多线程并发使用CAS更新数据时,可以不使用锁。JDK中大量使用了CAS来更新数据而防止加锁(synch...原创 2018-06-08 21:23:13 · 914 阅读 · 0 评论 -
Fork/Join 框架
分而治之 一直是一个有效地处理大任务的思想,当你不具备处理一个很大的任务时,可以将这个任务划分为多个小任务,记录下这些小任务的结果,最后将这些小任务的结果合并成最终想要的结果。 一、 在JDK中,fork/join框架主要干两件事情: 1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割 2.执行任务并合并...原创 2018-07-03 23:15:52 · 144 阅读 · 0 评论 -
Java中用户线程与守护线程(Daemon)
Java分为两种线程:用户线程和守护线程所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)...原创 2018-07-02 11:25:44 · 302 阅读 · 0 评论 -
BlockingQueue的实现、使用 以及 生产者消费者的BlockingQueue实现
BlockingQueueBlockingQueue接口主要实现:主要有ArrayBlockingQueue(基于数组,有界队列)、LinkedBlockingQueue(无界队列)。关键是在Blocking上,它会让服务线程在队列为空时,进行等待,当有新的消息进入队列后,自动将线程唤醒。BlockingQueue的实现与使用ArrayBlockingQueue...原创 2018-05-28 22:09:24 · 1012 阅读 · 0 评论 -
ThreadLocal 的学习理解及实战中应用
ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。设计初衷:提供线程内部的局部变量,在本线程内随时随地可取,隔离其他线程。ThreadLocal基本操作:initialValue函数 : initialValue函数用来设置ThreadLocal的初始值,该函数在调用get函数的时候...原创 2018-05-27 16:35:44 · 374 阅读 · 0 评论 -
Java 多线程连续打印ABC
1. 利用synchronized思路: 打印A时,必须先拿到 B,C锁, 打印完了之后,释放A锁,然后打印B的线程拿到A锁后就可以打印B,依次循环。public class MythreadPrinter implements Runnable { private String name; private Object prev; private Object self;...原创 2018-04-15 17:35:48 · 416 阅读 · 0 评论 -
Java多线程中的Exchanger
一、背景 Exchanger(交换者)作用是作为一个同步点,线程通过它可以配对交换数据。 每个线程可以通过exchange方法来传递想要传递的数据,并且返回时接受其他线程传递的数据。 Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一...原创 2018-04-10 09:35:20 · 241 阅读 · 0 评论 -
Java并发包学习(二):线程池
一、线程复用:线程池在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达...原创 2018-03-04 21:26:46 · 330 阅读 · 2 评论 -
Java并发包学习(一):坑终于填的差不多了
一、synchronized的功能扩展:重入锁1.1. ReentrantLock类重入锁可以完全代替synchronized关键字,使用java.util.concurrent.locks.ReentrantLock类来实现。案例如下:package multi_thread;import java.util.concurrent.locks.ReentrantLock;public c...原创 2018-03-03 10:51:12 · 1763 阅读 · 0 评论 -
Java中的volatile关键字
1.JMM内存模型JMM 的关键技术点都是围绕着多线程的原子性、可见性和有序性来建立的原子性原则性是指一个操作是不可中断的。可见性其一修改,其余接受通知。有序性即程序执行的顺序按照代码的先后顺序执行。 在并发时,程序的执行可能就会出现乱序。 有序性问题的原因是因为程序在执行时,可能会进行指令重排,重排后的指令与原先的顺序未必一致。2.volatile关键字volatile : 易变的,不稳定的。v...原创 2018-03-16 16:34:21 · 199 阅读 · 1 评论 -
Form表单的嵌套问题
最近在项目中碰到了form中还需要另设form表单的问题,查了下,简单记录在这里。参考:https://www.cnblogs.com/jpfss/p/9468293.html1. 先看一个正确的写法:<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>...原创 2019-02-18 17:09:35 · 20326 阅读 · 1 评论