程序的跨平台性:除了能够运行,还必须保证运行的结果。

第二种方式:

Class MyThread  implements Runnable{

  Public  void run(){

  Runnable target=new MyThread();

  Thread t3=new Thread(target);

  Thread.start();//启动线程

}

}

P384:通过接口实现继承

 

练习:写两个线程:

①  输入200个“###”②输入200个“***”

 

下面为线程中的7中非常重要的状态:(有的书上也只有认为前五种状态:而将“锁池”和“等待队列”都看成是“阻塞”状态的特殊情况:这种认识也是正确的,但是将“锁池”和“等待队列”单独分离出来有利于对程序的理解)

       
   
     
 

 

 

                  ①              ⑴

                 ②                   ⑵

                ③                        ⑶             run()结束

    Start()

                           OS分配CPU

 
   

 

                        CPU时间片结束

                             yield()                      o.wait()

                                            等待锁标记

 
   

 

 

                                                 notify()

注意:图中标记依次为

①输入完毕;②wake up③t1退出

⑴如等待输入(输入设备进行处理,而CUP不处理),则放入阻塞,直到输入完毕。

⑵线程休眠sleep()

⑶t1.join()指停止main(),然后在某段时间内将t1加入运行队列,直到t1退出,main()才结束。

特别注意:①②③与⑴⑵⑶是一一对应的。

 

进程的休眠:Thread sleep(1000);//括号中以毫秒为单位

main()运行完毕,即使在结束时时间片还没有用完,CPU也放弃此时间片,继续运行其他程序。

Try{Thread.sleep(1000);}

Catch(Exception e){e.printStackTrace(e);}

T1.join()表示运行线程放弃执行权,进入阻塞状态。

t1结束时,main()可以重新进入运行状态。

T1.join实际上是把并发的线程编程并行运行。

线程的优先级:1-10,越大优先级越高,优先级越高被OS选中的可能性就越大。(不建议使用,因为不同操作系统的优先级并不相同,使得程序不具备跨平台性,这种优先级只是粗略地划分)。

注:程序的跨平台性:除了能够运行,还必须保证运行的结果。

 

一个使用yield()就马上交出执行权,回到可运行状态,等待OS的再次调用。

原文地址:https://www.cnblogs.com/borter/p/10744106.html