多线程学习笔记(一)

2018-09-06  本文已影响11人  42b551ef23a6

Java并发编程,对于平时只接触到CRUD的程序员来说,就像是一个看起来很美的冰山。明白进程和线程;知道Thread和Runnable等实现方式;也了解了线程池;Callable和Future的使用;但是在工作中,却少有机会去接触和实践。但是说实话,我也是从上一次跳槽面试开始,逐步去深入它的一些底层机制,试图一窥它的全貌,但目前看来,这条路还会很长,但也确实激发了我那么一点兴趣,希望能在以后的时间里,将自己的所学所想记录在这里,以供大家参考和自己复习。——2018.09.06
说明:本笔记参考gitchat作者追梦(加多)的内容精简整理,如有版权问题,请大家直接到gitchat进行订阅学习。

  1. 理解线程前务必先搞懂进程
  1. 在内存中,线程占用的内存区域叫做“工作内存”,在工作内存中,有两个结构是必须要明白的,一个是程序计数器,另一个是栈。
  1. 线程的运行
  1. 什么是共享资源
  1. 线程的通知与等待
    • 注意:阻塞的线程有可能出现虚拟唤醒的情况,因此必须使用循环检查的方式。
synchronized (obj) {
        while (条件不满足){
               obj.wait();  
        }
 }
  1. 等待线程执行终止的join方法
  1. 让线程睡眠的sleep方法

  1. 线程中断
public class InterupptedDemo {

    public static void main(String[] args) throws InterruptedException {

        Thread thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("do some work");
            }
        });

        thread.start();

        Thread.sleep(1);

        System.out.println("main thread interrupt child thread");

        //中断子线程
        thread.interrupt();

        //等待子线程执行完毕
        thread.join();
        System.out.println("main is over");
    }
}
  1. 理解线程的上下文
  1. 线程死锁
enter image description here
  1. 守护线程与用户线程
public static void main(String[] args) {

        Thread daemonThread = new Thread(new  Runnable() {
            public void run() {

            }
        });

        //设置为守护线程
        daemonThread.setDaemon(true);
        daemonThread.start();

    } 
上一篇 下一篇

猜你喜欢

热点阅读