Java线程

来源:互联网 发布:2016网络电视剧排行榜 编辑:程序博客网 时间:2024/06/17 20:11

       多线程技术在现代计算机中占据了一个很重要的地位,为了满足人类无休止的剥削计算机的“虚荣心”,让计算机干更多的事情,并且干的更快。每当java命令启动一个java任务就启动了一个jvm进程,jvm找到要运行的主方法,也就是main方法,然后启动一个线程开始运行,这个线程也就是主线程。当main方法执行完毕,主线程也就结束了,预示着jvm就要退出了。线程的启动,运行和终止都是由jvm进行调度的,在java中采用的是抢占式的方法,也就是按照线程的优先级来分配CPU资源。其实为了能够真正理解线程的概念,需要一些基础知识作为后盾,比如并行和并发,线程和进程,分时调度和抢占式调度等等,这些就不介绍了。

      下面主要总结下如何使用Java线程。

Java线程简单说来有五种状态:New,Runnable,Running,Blocked,Dead。其中的Blocked状态其实包括几种:sleep,wait,blocked。

1. 建立线程

     Java中新建一个线程有两种方法:实现Runnable接口和继承Thread类。

     比如通过实现Runnable接口的实现方法:

public  class Task implements Runnable{@Overridepublic void run(){//...}}Runnable task1 = new Task();Thread task1 = new Thread(task1);
继承Thread类的方法:

public void MyThread extends Thread{ public void run()  {    ...  }}...Thread thr = new MyThread();

上面两种方法都可以实现线程,究竟哪一个好应该也要看应用场合,不过实现接口的方法可能更灵活一点。

2. 启动线程

    启动线程比较简单,直接调用线程的start方法,注意千万不要调用run方法,除非你不想让它成为一个线程。那既然start是个方法,那就应该可以覆写,但是为什么没见到有人覆写start方法呢?start方法里面到底做了什么?如果你和我一样有强烈的好奇心的话就去看Thread类的源码吧,不过提醒一下里面用到了一个本地方法源码是没有的。当然,对于不求甚解的人来说也没必要知道那么多。只要知道启动线程调用start方法就好了。

3. 运行线程

    当调用线程的start方法后,线程的状态就转换到了Runnable状态了,处于可运行状态,至于能不能被运行就要看CPU现在忙不忙了,对于单CPU的系统来说一次仅有一个线程可以运行,所以你能做的就是等了。如果这个线程很紧急怎么办?提高线程的优先级可能是个办法。

4. 阻塞

    线程何时发生阻塞?线程调用了sleep方法,请求锁而未得,请求IO等资源而未得,调用了wait'方法但是没收到notify,当然还有join等方法。当睡眠时间时间超时,得到了锁,请求的资源获得了等的时候线程会再依次进入Runnable状态等待CPU的调度。

5.死亡

    当线程run方法结束或者出现了异常退出run方法后,线程也就随之结束了。

上面只是简单总结了一下基础内容,下一次继续总结关于如何结束线程,如何同步线程等。


原创粉丝点击