《Java并发编程的艺术》笔记(1)-并发编程的挑战

来源:互联网 发布:阿里在线编程难么 编辑:程序博客网 时间:2024/06/06 03:21

一、上下文切换

  1. 含义
    CPU通过给每个线程分配时间片来实现多线程,时间片一般是几十毫秒。当任务时间片用光后会切到下一个任务,但是,在切换前会保存上一个任务的状态,以便切换回这个任务的时候可以再加载这个任务。任务从保存状态到再加载的过程就是一次上下文的切换。
  2. 如何减少上下文切换
    (1)无锁并发编程。如将数据合理分段,不同线程处理不同不同段数据。
    (2)CAS算法。Java的Atomic包使用CAS算法,就不需要锁。
    (3)避免创建不需要的线程。
    (4)协程。

二、死锁

避免死锁的常见方法:
(1)避免一个线程同时获取多个锁。
(2)避免一个线程在锁内同时占用多个资源。
(3)尝试使用定时锁,trylock等。
(4)对于数据库锁,加锁和解锁必须在一个数据库连接里。

三、其他

(1)thread.join()
等待thread执行完毕后,在继续执行当前线程。