Java多线程和同步的理解

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

相关文章
相关标签/搜索