Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Java多线程和同步的理解

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