Java线程浅谈

来源:互联网 发布:java实现简单的聊天室 编辑:程序博客网 时间:2024/05/21 09:43

         说到线程,我们就不得不提到进程,我们经常会混淆这两个东西,甚至觉得这两个东西是一样的。如果是这样,那就大错特错了。进程,是计算机中运行着的不同的程序;然而线程,是一个程序中的能同时运行的不同的代码。这有点难理解啊,这样说吧,在计算机中,我打开了QQ和Chorm浏览器,QQ是一个进程,Chorm也是一个进程,程序在运行的时候,系统会在内存中分配一块独立的空间给这两个程序;线程则属于QQ或者浏览器。在深入一点讲,假设我们只有一个CPU,但我们要3个程序要同时运行,应该怎么办呢?这让我想到了我家旁边的老奶奶,有两个孙子,玩具很少,两个孙子也很奇怪,每次都要玩一样的玩具,为了让连个孙子都能玩上玩具,老奶奶可聪明了,让每一个孙子玩玩具的时间缩短,但没有玩具的孙子要哭时,就把另一个孙子手中的玩具给要哭的孙子玩,巧妙的解决了问题。我们也用同样的思路来解决我们的问题,让每个程序排队使用CPU,但每个程序使用的时间不能过长,这样就有了3个程序在同时运行的假象,这叫 “轮转 ” 。线程的实现,也是一样的机制,都是运用CPU的轮转,创造程序中不同的代码段同时运行的假象。


     接下来讲一下线程的实现方式,总的来说有两种方式。一种是继承Thread类,然后重写 run() 方法,继承了Thread,其类本身就成了一个线程,调用 start() 方法就可一开始线程了;另一种方法是继承 Runnable接口,同样把需要线程运行的代码放在run()函数里面,但继承Runnable接口只是把该类封装成了一个线程,还要实例化一个Thread()线程类,把该类传到线程类,借用线程类的 start() 方法来开始线程。代码如下:

//方式一public class test extends Thread{public void run(){//要线程实现的代码}}//实现方法test t=new test();t.start();       //调用start()就可以开始线程了//方式二public class test implements Runnable{public void run(){//要线程实现的代码}}//实现方法test t=new test();Thread thread=new Thread(t);   //讲封装好的线程类传给线程Thread.start();       //调用线程类的start()就可以开始线程了

        对与线程,我们还要知道线程的状态有那些。我们上面提到了 start(),我们也说start()可以开始线程,那如果有多个线程呢?程序会同时运行这些线程吗?我们上面也讨论过,知道同时运行是假象。实际上,start()只是让此线程有了让CPU处理的资格,具体实行那个,还是要看CPU,也就是说start()后,线程就已经开始不断的运行了。当线程开始跑了之后,我们有没有办法让线程停一下再运行呢?这是可以的,我们只需调用sleep(),并给休眠的时间,时间到,线程会自动醒来。醒来后,也不一定会运行,只是再次获得了让CPU运行的资格,还需要等待CPU的轮转。

  关于线程的基础知识,基本就这些啦。还有其他需要注意的问题,我们以后继续讨论。

   

1 0
原创粉丝点击