《android进阶之光》——多线程编程(上)

今天了解了下多线程编程,知识点如下:

  • 进程与线程:

  • 进程是什么?线程是什么?
    进程可以看作是程序的实体,是线程的容器,是受操作系统管理的基本运行单元,例如exe文件就是一个进程。
    线程是进程运行的一些子任务,是操作系统调度的最小单元,各线程拥有自己的计数器,堆栈,局部变量等,也可以访问线程间共享的内存。

  • 线程的状态有哪些?
    新创建,可运行,等待,超时等待,阻塞,终止

  • 怎么创建一个线程?
    -三种方法
    第一种,MyTread继承Tread,在MyTread的run函数中写要在新线程里运行的代码,在需要的地方创造实例并且调用start;
    第二种,实现Runnerable接口,重写他的run函数,并且用runnable的实例来构造Tread,最后调用start;
    第三种,实现接口callable,并重写call函数,这个方法与第二种不同之处在于,call可抛出异常但是run不可以,而且运行callable可以拿到一个Futrue值;

  • 中断
    导致中断的情况分两种,一种是运行完run之后线程自然结束;另一种是运行过程中抛出异常。
    注意一个线程如果处于阻塞状态,线程检查是否中断的时候发现标志位为true,会抛出中断异常,但是抛出前会把标志位置为false,所以无法判断一个阻塞的线程是否被中断。

  • 如何安全的终止线程
    使用中断/使用volatile标志


  • 锁主要是用来阻止多个线程同时访问同一段代码,有锁就必须在finally里解锁,否则会有一直阻塞的危险;

  • 条件对象的使用
    一旦有一个线程调用了条件对象的await函数,则就会处于阻塞状态,并放弃锁,直到有别的线程调用了condition的signalAll,这个阻塞的线程才会解除阻塞。当这个调用了signal的线程退出锁之后,所有处于可运行的线程就开始竞争。

  • volatile
    可保证可见性和有序性,但不能保证原子性。可见性是指,这个共享变量的值如果被某一线程改动,其他线程将会立即知道。有序性是指volatile变量之前的语句不能在volatile之后进行,反之一样。不能保证原子性是说不能保证对变量的操作是原子性的,例如如果对volatile变量进行自加操作,就有可能被打断。

好险,今天差一点就想偷懒了。鹿小葵加油!放弃你就输了。

距鹿小葵成为大神还有997天!

你可能感兴趣的:(读书笔记)