多线程(二)

来源:互联网 发布:知乎著名小黄文 编辑:程序博客网 时间:2024/04/28 19:12

     java对多线程的实现:

            继承Thread类, 资源不能同享;

            实现Runnable接口,可以实现资源的共享.

         但是无论是继承还是实现, 都需要我们去复写run(), 此方法为线程的主体. 启动线程靠的是 Thread的 start()

              start() --> run()

 

       当线程被 start() 之后 并不是立刻 启动的, 它会首先进入一个 "就绪状态" ,等待CPU分配内存空间,等分配好之后, CPU会过来调用该线程的run() , 使该线程进入运行状态.当程序因为某种原因意外停止的时候,就会进入 "阻塞状态" ,他就暂时停止不会动了,  "阻塞状态" 结束之后就会进入 "就绪状态",等待CPU资源的调用.

    

      线程名称的获取是通过 Thread的静态方法调用来获取的

             即 Thread.currentThread()

      获取线程名称, Thread对象.getName()   同时也可以通过 Thread.setName() 来设置Thread的名称.

 

        线程的名称一般是在启动之前设置的, 但是也允许为启动之后的线程设置名称.

 

      所有的线程操作就是值得 Thread类的操作.

 

      当前的线程可以指操作当前调用这个方法的线程 即当前线程就是  "线程.方法()" 当前线程就是这个" 线程".

 

      通过程序中 Thread.getName() 得出的 ThreadName 标识号都是从 "0" 开始的.

 

      其实我也是刚刚知道,  mian 方法 也是一个多线程, 所以之前的所有程序都是基于多线程机制, 在main方法中, 通过对象.方法调用的一切代码都是主线程.

 

      start() 通知线程规划器这个新线程已经准备就绪 , 而且应当在规划器最早的方便时间调用它的run() .

      isAlive()  用来测试线程是否已经启动, 并且仍然启动呢?

 

      一个线程只能启动一次,

 

        isAlive() 在 线程启动之前呢 , 返回的结果肯定就是 false 了, 在 start() 之后呢 大多数情况下是true, 但是有些时候还是 false的  ,  那么这是为什么呢?  因为线程有可能优先执行完的,那么 结果是false , 也有可能是最后才执行完, 这个时候返回的是 true 了.

 

           使用public static void sleep(long millis)
                  throws InterruptedException          可以使程序进行短暂的休眠,  首先看到它是一个静态方法 , 然后呢 这个方法会向外抛出一个异常, 也就是我们在程序中调用该方法的时候  一定要对其进行异常处理 try{}catch{}

          

          在线程中使用join方法, 用于强制某一线程运行,

          public final void join()
                throws InterruptedException 看到了 , 在这里, join() 也是会抛出一个异常的 .

 

         join() 表示什么呢?  一个  "线程对象.join()" 表示当这个 "线程对象"必须完成之后 其它的线程才可以继续执行, 表示强制性运行. 

      

       

原创粉丝点击