java 多线程(0) Java线程

线程编程

  线程是系统调度的基本单元,每当建立一个进程时,会有许多的线程,也叫轻量级进程,在一个进程中拥有多个线程,各自都有本身的计数器,堆和局部变量属性,而且可以分享内存变量.多线程

 为何要使用多线程post

  1.更多的处理器核心spa

  2.更快的响应时间操作系统

  3.更好的编程模型线程

优先级3d

  线程优先级决定了线程须要多或少分配一些处理器资源的线程属性,经过priority来控制优先级,范围从1-10,在线程构建SetPriority(int)方法来修改优先级,默认为5.对象

线程的运行状态blog

 

状态名称 说明
NEW 初始状态,线程被构建,但尚未构建START()
RUNNABLE 运行状态,JAVA线程将操做系统中的就绪和运行,统称"运行中"
BLOCKED 阻塞状态,线程阻塞与锁
WAITING 等待状态,线程进入等待状态
TIME_WAITING 超时等待状态
TERMINATED 终止状态

在线程优先级中,JPS能够发如今自身的生命周期中,并非固定的处于某个状态,而是随着代码执行在不一样的状态之间切换生命周期

1-1线程运行状态

 

Daemon线程

 

  支持型线程,主要做用于程序后台调度以及支持性工做,当JVM不存在非DAEMON线程时,JVM将会退出,经过THREAD.SETDAEMON(TRUE)设置DAEMON线程

  !main线程随着daemoned方法以后MAIN终止.

 

Boot And Stop

 

  理解中断

  interrupt()对其进行中断,线程经过检查自身是否中断进行响应,也能够调用静态方法Thread.interrupted()对当前线程终端标识位进行复位.

 

过时的STOP(),RESUME(),SUSPEND()

  死锁致使不建议使用,suspend()方法在调用时不会释放已被占有的资源,而是占有资源进入休眠状态,stop()在终结线程不会保证线程正常释放,因此会致使程序工做在不肯定状态中

 

 

Volatile

    用来修饰字段,告知程序任何变量的访问均须要从共享内存中获取,而对他的改变必须同步刷新回共享内存,保证全部线程对变量的可见性.

 

Synchronized

  能够修饰方法或者以同步块的形式使用保证多个线程在同一时刻,只能有一个线程处于方法的同步块中,保证了线程对变量访问的可见性和排他性.

 

  !任何线程对OBJECT的访问,首先要获取OBJECT的监视器,若是获取失败进入同步队列,状态为BLOCKED,当前驱释放了锁,释放操做唤醒阻塞在同步队列中的线程而且从新尝试访问

 

等待/通知机制

  while方法可以检查变量是否符合预期,可是存在着如下问题

  1.难以确保及时性.

  2.难以下降开销

  因此JAVA有内置的等待通知机制来确保矛盾的解决(JAVA.LANG.OBJECT)

  

等待/通知的相关方法
notify() 通知一个在等待得线程,从WAIT()返回
notifyAll() 通知所有在等待的线程
wait() 调用方法进入WAITING状态,只有等待线程通知或中断才会返回
WAIT(LONG) 超过等待一段时间,时间为MS
WAIIT(LONG,INT)  超时时间的控制,最低为纳秒
   

 使用NOTIFY()或NOTIFYALL()需注意

  1.先对调用对象加锁

  2.调用WAIT()方法后,线程状态由RUNNING转变为WAITING,并将当前队列放到等待队列

  3.NOTIFY()或NOTIFYALL()方法调用后,等待线程依旧不会从WAIT()返回,须要调用NOTIFY()或者NOTIFYALL()线程释放以后,才有机会返回.

  4.notify()方法将等待队列移动到同步队列中,notifyAll()则将所有线程移动到同步队列中,移动状态从WAITING转变到BLOCKED

  5.wait()方法返回前题是得到调用对象的锁.

 

等待/通知经典范式

  等待

  1.获取对象的锁

  2.条件不知足时调用WAIT()

  3.条件知足执行

   通知

  1.得到对象锁

  2.改变条件

  3.通知全部等待的对象线程

管道I/O流

  主要用于数据传输,媒介为内存

  主要包括: PipedOutputStream,PipedInputStream,PipedReader,PipedWriter

 步骤:

    connect(PIPEDREADER);

Thread.join()

  指当前线程等待Thread线程终止以后才从thread.join()返回,

 

ThreadLocal

  线程变量,以ThreadLocaL对象为键,任意对象为值得存储结构,被附带在线程中,一个线程能够根据一个ThreadLocal变量对象查询到绑定这个线程上的值

  经过SET(T)来设置一个值,get()来获取

相关文章
相关标签/搜索