zoukankan      html  css  js  c++  java
  • 《Java高并发编程详解》读书笔记(一)

    多线程基础

    1. 什么是线程?

    线程是程序执行的一个路径,每个线程都有自己的局部变量表、程序计数器以及各自的生命周期。

    1. 请描述线程的生命周期?

    1. 如何构造并启动一个线程?

    构造一个线程,有两种方式:

    继承Thread类并覆盖run方法;

    /* 这个MyThread类继承Thread类 */
    public class MyThread extends Thread{
    
      @Override
      public void run(){
        // 实现业务逻辑
      }
    }
    
    Thread myThread = new MyThread();
    

    实现Runnable接口并实现run方法,通过Thread类的构造方法传入Runnable接口的实现类;

    
    /*
    这个MyThread类只是实现了Runnable接口,需要后续Thread类构造方法构造出线程对象
    */
    public class MyRunnable implements Runnable{
    
      @Override
      public void run(){
        // 实现业务逻辑
      }
    }
    Thread myThread = new Thread(new MyRunnable());
    

    通过线程对象的start方法运行该线程:

    
    myThread.start();
    
    1. 上图中的RUNNING状态什么时候切换成RUNNABLE状态,什么时候切换成BLOCKED状态?

    RUNNING状态的线程失去CPU时,如调度器轮询或主动调用yield方法,会进入RUNNABLE状态;

    RUNNING状态的线程无法获取所需要的资源时,如锁资源、IO资源,或者主动调用sleep、wait方法时,会进入BLOCKED状态;

    1. 哪些方法会放弃CPU,哪些方法会放弃锁资源?

    sleep(): 放弃CPU,不放弃锁;

    yield(): 在CPU资源紧张时放弃CPU,不放弃锁;
    wait(): 放弃CPU,放弃锁;因此调用前必须持有锁;

    面朝大海,春暖花开。
  • 相关阅读:
    第五章 项目范围管理
    一位华为IT总监的12大职场经验谈
    接到面试通知后该做什么
    经验借鉴:外包失败三条血泪经验分享
    项目范围管理收集需求
    绝对不能对老板说的十句傻话
    项目整合实施整体变更控制
    项目整合结束项目或阶段
    9招助你夺取更高职位
    IT人写好简历的原则与方法
  • 原文地址:https://www.cnblogs.com/HapLe0/p/10704853.html
Copyright © 2011-2022 走看看