实战Java高并发程序设计》笔记

《实战Java高并发程序设计》笔记

Linus:The only place where parallelism matters is in graphical or the server side,where we already largely have it. Pushing it anywhere is just pointless

一 走入并行世界
1.2 你必须知道的几个概念:

同步和异步

同步:同步调用一旦开始,调用者必须等到方法返回后才能继续后续的行为

异步:异步方法更像一个消息传递,一旦开始,方法调用就会立刻返回,调用者可以继续后续的操作.异步方法通常会在一个线程中真实的执行.如果异步调用需要返回结果,那么当这个调用真实完成时,则会通知调用者.

并发和并行

并发:偏重于多个任务交替执行.

并行:真正意义的同时执行.

通常两者不做区分.

临界区

临界区用来表示一种公共资源或者说共享数据,可以被多个线程使用,但是每一次,只能有一个线程使用它,一旦临界区资源被调用,其他线程想要这个资源只能等待.

例子:打印机

阻塞和非阻塞

如上

死锁,饥饿,和活锁

死锁:

饥饿:某一个或者多个线程因为某种原因无法获得所需要的资源,导致一直无法执行下去.

活锁:如果两个线程的"智力"不够,且都秉持着"谦让"的原则,主动将资源释放给他人使用,那么导致两个资源不断地在两个线程之间跳动,没有一个线程可以同时拿到所有资源正常执行.

1.3 并发级别
  • 阻塞 无饥饿 无障碍 无锁 无等待
1.5 JMM

原子性:一个操作是不可被中断的

可见性:如果一个线程修改了一个全局变量,那么其他线程马上就可以知道这个改动.

  • 有序性:理解 指令重排

  • Happen-Before 规则:

二 Java 并行程序基础
2.1 线程

线程的定义:

线程的生命周期:线程的所有状态都在 Thread 中的 State 枚举中定义

public enum State{
   
  NEW,
  RUNNABLE,
  BLOCKED,
  WAITING,
  TIMED_WAITING,
  TERMINATED;
}

NEW 状态表示刚刚创建的线程,这种线程还没有开始执行.等到线程的 start()方法调用时,才表示线程开始执行,当线程执行时,处于 RUNNABLE 状态,表示线程所需的一切资源都准备好了,如果线程在执行过程遇到了 synchronized 同步块,就会进入 BLOCKED 阻塞状态,这时表示线程会暂停执行,直到获得请求的锁,WAITING 和 TIMED_WAITING都表示等待,TIMED_WAITING 表示一个有时限的等待.等待的事件,比如,通过 wait()方法等待 notify()方法,而通过join() 方法等待的线程则会等待目标线程的终止,一旦等到了期望的事件,线程就会再次执行,进入 RUNNABLE 状态.等线程执行完毕后,则进入 TERMINATED 状态,表示结束

2.2 初始线程
Thread t1 = new Thread();
t1.start;
Thread t1 = new Thread();
t1.run; //不能新建一个线程,而是在当前线程中调用 run 方法,只是作为一个普通的方法调用
Thread t1 = new Thread(){
   
  @Override
  public void run(){
   
    System.out.println("Hello I am t1");
  }
} //匿名内部类:创建一个继承自 Thread 的匿名类对象
t1.start;
public class CreatThread implements Runnable{
   
  @Overide
  public void run(){
   
    System.out.println("Oh,I am Runnable!");
  }
  publc static void main(String[] args){
   
    Thread t1 = new Thread(new CreateThread());
    t1.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值