java小知识点7

进程:每个进程拥有自己的一整套变量

线程:共享数据

调用Thread.sleep不会创建一个新的线程,sleep是Thread类的静态方法,用于暂停当前线程。

定义线程建议通过Runnable接口,继承Thread无法继承其它的类。

线程的stop方法已经被弃用。请求线程终止,使用interrupt方法

如果线程正在运行,调用interrupt方法,中断状态置位

线程被阻塞,调用interrupt方法,抛出InterruptException

线程状态:

  • new
  • runnable
  • blocking
  • waiting
  • timed waiting
  • terminated

新创建状态:

Thread对象刚被实例化

可运行线程:

调用start方法后,线程处于runnable方法。可运行的线程可能正在运行,也可能没有运行,取决于时间片分配

阻塞状态和等待状态:

被终止:

  • run方法正常退出
  • 一个没有捕获的异常

线程属性

线程优先级1-10,高度依赖操作系统

守护线程为其它线程提供服务,当虚拟机中只剩下守护线程,虚拟机退出。守护线程不应该访问固有资源,因为它在任意时刻发生中断。

线程的run方法不能抛出任何必检异常

在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked exception处理掉。

捕获线程逃逸的异常:http://blog.csdn.net/u010853261/article/details/61419677

同步

ReentrantLock和synchronized

不同对象内部的lock不具有竞争,Synchronized也是一样的。

条件对象的作用:进入临界区,还需要一个条件才能正常工作

不使用>synchronized>lock+condition

监视器:不需要程序员考虑加锁,保持线程安全

用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。

volatile详细解释:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html

尝试获得锁:myLock.tryLock()成功加锁返回True,失败返回False

ReentrantLock:可以再次进入的锁

ReentrantReadWriteLock:读写锁

不要使用线程的stop方法和suspend方法

阻塞队列

阻塞队列:LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue、DelayQueue(完成延迟时间才会从队列移除)

线程安全的集合

Callable和future

执行器

同步器

原文地址:https://www.cnblogs.com/zcy-backend/p/6879360.html