1、 进程与线程 java
在谈论线程以前,咱们先来看看什么叫进程,以及进程与线程的关系。 linux
进程 windows
咱们在windows操做系统中打开任务管理器,能够看到有一项是“进程”,里面列举出了用户目前正在运行的全部进程,包括系统进程和用户应用程序进程,以及每一个进程所占用的内存资源等信息。进程是操做系统结构的基础,它不只只包括运行的程序代码,还包括当前的活动。对于每个进程,操做系统都会为其分配一个独立的内存块,各进程间资源是不共享的。 多线程
划分时间片,宏观上并行,微观上串行 并发
线程 操作系统
一个Java程序运行以后,就会启动一个JVM实例进程,这个进程就负责处理这个程序全部的操做,直到程序结束,进程也随之结束。 线程
而线程就是再在进程的内部将CPU资源进行再次划分,以知足同时处理多条语句的须要(微观上,其实也是并行执行的),这些线程在进程内部的资源是共享的(正因如此,才会有同步以及锁的出现)。 htm
JVM进程启动必定会有一个主线程存在,即main方法启动的线程,这个线程是Java程序的入口,咱们能够在main方法内部在定义咱们本身的线程,这样就能够实现多线程了。 对象
2、 Java多线程的实现方式 继承
java.lang.Thread类的一个对象就表明一个线程
线程是底层OS(操做系统)维护的资源,JVM跑在OS上,在JVM中建立一个Thread对象,调用其start()方法,底层OS会申请一个线程资源,线程对象可到底层管理一个线程,建立好线程以后,把要让线程执行的代码封装到线程对象中(覆盖run()方法)。
实现线程代码的方式:
一、继承Thread类,覆盖run()方法
去底层申请线程并运行,对线程对象调start()方法,main方法是一个主线程
宏观并行,微观串行
二、实现Runnable接口
使用多态得到Runnable对象,成为目标对象
再利用目标对象构造线程对象Thread t = new Thread(target);//target为Runnable接口类型
对于中两种方法的具体介绍能够参考 http://www.linuxidc.com/Linux/2013-12/93690.htm
3、 线程的优先级
线程的优先级是从0-10的整数,0表示最低,5表示普通,10表示最大;JVM会自动将java线程的优先级转换为操做系统的优先级。
main线程的优先级是5。
4、 线程的状态
下面为线程中的7个很是重要的状态(有的书上也只有认为前五种状态:而将“锁池”和“等待池”都当作是“阻塞”状态的特殊状况:这种认识也是正确的,可是将“锁池”和“等待池”单独分离出来有利于对程序的理解):
一、 初始状态:线程刚建立(Thread th = new Thread(target);)
二、 可运行状态:线程建立以后调用它的start()方法,此时线程状态就变动为可运行状态,但必定就会当即运行,须要等待得到CPU。
三、 运行状态:调用线程的start()方法以后,线程就会进入等待运行状态(可运行状态),此时一旦该线程得到CPU的使用权,县城就会当即进入运行状态,即执行线程的run()方法。
四、 阻塞状态:线程失去CPU的使用权,进入一种等待状态,注意不是可运行状态。有如下三种状况会使线程进入阻塞状态:
(1) 等待外部设备输入:如等待键盘输入,则该线程会进入阻塞状态直到输入完毕,注意:阻塞结束以后是进入可运行状态,而不是运行状态。
(2) 线程休眠,即调用线程的sleep()方法。Sleep()方法有一个参数,表示休眠的时间,当线程休眠的时间到达指定时间后,线程会自动结束阻塞状态而进入可运行状态,等待CPU。
(3) 一个线程调用另外一个线程的join()方法,join()方法指的是调用该方法的线程将进入阻塞状态直到被调用join()方法的线程运行结束以后,才会进入可运行状态。
例:在t2线程的run()方法内部有这样一句代码t1.join();(t1是一个线程对象),这将意味着党线程t2执行到该语句时就会调用线程t1的join()方法,从而t2进入阻塞状态,直到t1运行结束为止。
五、 终止状态:即线程执行结束
六、 锁池状态
七、 等待队列
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2013-12/93691p2.htm
相关阅读:
Java Hashtable多线程操做遍历问题 http://www.linuxidc.com/Linux/2013-01/78574.htm
Java多线程顺序执行 http://www.linuxidc.com/Linux/2012-07/65033.htm
Java多线程问题之同步器CyclicBarrier http://www.linuxidc.com/Linux/2012-07/64593.htm
Java多线程之wait()和notify() http://www.linuxidc.com/Linux/2012-03/57067.htm
Java多线程之synchronized http://www.linuxidc.com/Linux/2012-03/57068.htm
Java多线程之并发锁 http://www.linuxidc.com/Linux/2012-03/57069.htm