博客专栏  >  研发管理   >  并发编程

并发编程

并发编程经验

关注
0 已关注
21篇博文
  • 《并发编程》--22.死锁产生的条件和动静态避免死锁

    产生死锁的必要条件: 1. 互斥条件:就是一个资源同时只能有一个进程占有,不能有两个或是两个以上的占有。 2. 不可抢占条件:在一个进程所获取的资源在未使用完毕之前,资源申请者不能强行的从资源占有者...

    2017-09-27 15:29
    68
  • 《并发编程》--21.无锁的线程安全整数 AtomicInteger

    JDK并发包下有一个atomic包,里面实现了一些直接中CAS操作的线程安全的类型。 其中,最常用的一个类就是AtomicInteger。可以把它看做一个整数,但是与Integer不同的是,他是可变...

    2017-09-27 11:25
    58
  • 《并发编程》--20.无锁的并发策略(比较交换 CAS)

    与锁相比,使用比较交换(CAS)会使程序看起来更加复杂一些,但由于其非阻塞性,他对死锁天生免疫,并且,线程间的相互影响也远远比基于锁的方式要小。更为重要的是,使用无锁的方式完全没有锁竞争带来的系统开销...

    2017-09-27 10:56
    80
  • 《并发编程》--19.虚拟机内的锁优化

    首先要介绍下对象头,在JVM中,每个对象都有一个对象头。 Mark Word,对象头的标记,32位(32位系统)。 描述对象的hash、锁信息,垃圾回收标记,年龄 还会保存指向锁记录的指针,指向...

    2017-09-26 16:18
    76
  • 《并发编程》--18.Java层锁的优化

    1 减少锁持有时间 public synchronized void syncMethod(){ othercode1(); mutextMethod(); othercode2()...

    2017-09-26 16:01
    61
  • 《并发编程》--17.BlockingQueue解析

    1.BlockingQueue定义的常用方法   抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remo...

    2017-09-26 11:57
    52
  • 《并发编程》--16.并发队列ConcurrentLinkedQueue

    1.介绍 在并发编程中需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式。 a.使用阻塞算法,   使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同...

    2017-09-26 11:21
    57
  • 《并发编程》--15.线程安全的HashMap

    众所周知,HashMap是线程不安全的。但是如果需要一个线程按钮的HashMap我们需要怎么做的。 其中一个可行的办法就是Collections.synchronizedMap。如下代码就是线程安全...

    2017-09-18 11:05
    63
  • 《并发编程》--14.Java线程池和自定义线程

    为了避免频繁的创建和销毁线程,减少CPU的压力,线程池就应运而生。 newFixedThreadPool()方法:该方法返回一个只有一个线程的线程池,该线程池的数量是固定始终不变。当有新任务提交时,线...

    2017-08-31 11:19
    63
  • 《并发编程》--13.CountDownLatch和CyclicBarrier

    CountDownLatch(倒计时器) 指子线程所有执行完毕后,主线程继续执行。适应于火箭发射,发令枪响等。 执行如下代码很容易理解 public class countdown { p...

    2017-08-31 10:25
    60
  • 《并发编程》--11.允许多个线程同时访问的信号量Semaphpre

    信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的拓展。无论是内部所synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一块资源,而信号量却可以指定...

    2017-08-29 16:12
    74
  • 《并发编程》--10.重入锁

    在jdk5的时代,重入锁可以完全替代synchronized。但从jdk6开始对synchronized做了大量的优化,使两者在性能上差距不大。 以下是冲入锁的一段简单代码 public class ...

    2017-08-29 14:45
    64
  • 《并发编程》--9.线程安全和synchronizd关键字

    线程安全是并行开发的基础。一般来说,程序并行就是为了获得更高的执行效率,但是高效率不能牺牲正确性为代价,否则将毫无意义。 故jdk提供了synchronized关键字,来实现线程之间的同步。他的工...

    2017-08-29 11:19
    68
  • 《并发编程》--8.线程优先级

    Java中的线程具有自己的优先级。优先级高的线程在竞争资源的时候更容易抢到资源。当然这只是概率的问题,如果人品不好,也会出现抢不过低优先级的情况。 由于线程的优先级调度和底层的操作系统有着密切的联系,...

    2017-08-18 16:11
    73
  • 《并发编程》--7.声明线程组

    如果在一个系统中,线程数量特别多,而且功能分配比较明确,那就可以将相同功能的线程放在一个线程组里。线程组里的线程同时启动,同时停止。 线程组的使用很简单,如下一个简单的demo public cl...

    2017-08-18 15:30
    67
  • 《并发编程》--6.Java内存模型(JMM)的关键字volatile

    Java的内存模型(JMM)都是围绕着原子性,有序性,可见性。一些特殊的场合下,需要用volatile等关键字保证这些特性。 当用volatile声明一个变量时,就相当于告诉虚拟机,这个变量...

    2017-08-18 14:26
    70
  • 《并发编程》--5.线程等待结束(join)和线程谦让(yield)

    在很多情况下,一个线程的输出可能非常依赖于另外一个或者多个线程的数据。在这种情况下,这个线程就需要等待依赖线程执行完毕,才能继续执行。jdk就给我们提供了join()这个方法。 public fin...

    2017-08-18 11:40
    73
  • 《并发编程》--4.线程等待(wait)和线程通知(notity)

    为了支持多线程之间的操作,jdk提供了线程等待(wait)和线程通知(notity)两个非常重要的方法,这两个方法是来自object类而不是thread类中。所以任何对象都可以调用这两个方法 。   ...

    2017-08-17 14:29
    105
  • 《并发编程》--3.中断线程

    表面意思:让线程停止执行。其实并非如此 线程中断并不会是线程立即退出,而是给线程发送一个通知,告诉该线程,别的希望你退出了!至于目标线程接到通知后会如何处理,需要目标线程自己决定。 注意:这里一定要区...

    2017-08-17 11:55
    70
  • 《并发编程》--2.终止线程

    通常情况下,线程执行完毕后都会自动结束,不需要手动关闭。但是也有特殊的时候。一些服务器的后台程序可能是常驻系统,他们不会正常终结。所以在一些特殊的情况下,需要我们手动终止线程。 查阅jdk就会发现,有...

    2017-08-17 11:19
    64
img博客搬家
img撰写博客
img发布 Chat
img专家申请
img意见反馈
img返回顶部