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

第二种方式:编程

Class MyThread  implements Runnable{并发

  Public  void run(){spa

  Runnable target=new MyThread();操作系统

  Thread t3=new Thread(target);线程

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

}接口

}队列

P384:经过接口实现继承进程

 

练习:写两个线程:ci

①  输入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的再次调用。

相关文章
相关标签/搜索