java中的线程[Java编程]
本文“java中的线程[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
编写具有多线程本领的程序常常会用到的办法有:
run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join()
还有一个重要的关键字:synchronized
本文将对以上内容举行讲授.
一:run()和start()
示例1:
publicclassThreadTestextendsThread{
publicvoidrun(){
for(inti=0;i<10;i++){
System.out.print(""+i);
}
}
publicstaticvoidmain(String[]args){
newThreadTest().start();
newThreadTest().start();
}
}
这是个简单的多线程程序.run()和start()是大家都很熟习的两个办法.把但愿并行处理的代码都放在run()中;stat()用于自动调用run(),这是JAVA的内涵机制规定的.并且run()的拜候掌握符必须是public,返回值必须是void(这种说法不精确,run()没有返回值),run()不带参数.
这些规定想必大家都早已知道了,但你能否清楚为什么run办法必须声明成这样的情势?这触及到JAVA的办法覆盖和重载的规定.这些内容很重要,请读者参考相关资料.
二:关键字synchronized
有了synchronized关键字,多线程程序的运行后果将变得可以掌握.synchronized关键字用于保护同享数据.请大家注意"同享数据",你一定要分清哪些数据是同享数据,JAVA是面向对象的程序计划语言,所以初学者在编写多线程程序时,简单分不清哪些数据是同享数据.请看下面的例子:
示例2:
publicclassThreadTestimplementsRunnable{
publicsynchronizedvoidrun(){
for(inti=0;i<10;i++){
System.out.print(""+i);
}
}
publicstaticvoidmain(String[]args){
Runnabler1=newThreadTest();
Runnabler2=newThreadTest();
Threadt1=newThread(r1);
Threadt2=newThread(r2);
t1.start();
t2.start();
}
}
在这个程序中,run()被加上了synchronized关键字.在main办法中成立了两个线程.你大概会认为此程序的运行后果一定为:0123456789
0123456789.但你错了!这个程序中synchronized关键字保护的不是同享数据(其实在这个程序中synchronized关键字没有起到任何作用,此程序的运行后果是不可预先肯定的).这个程序中的t1,t2是两个对象(r1,r2)的线程.JAVA是面向对象的程序计划语言,差别的对象的数据是差别的,r1,r2有各自的run()办法,而synchronized使同一个对象的多个线程,在某个时刻只有此中的一个线程可以拜候这个对象的synchronized数据.每个对象都有一个"锁标志",当这个对象的一个线程拜候这个对象的某个synchronized数据时,这个对象的全部被synchronized修饰的数据将被上锁(因为"锁标志"被当前线程拿走了),只有当前线程拜候完它要拜候的synchronized数据时,当前线程才会释放"锁标志",这样同一个对象的别的线程才有机会拜候synchronized数据.
示例3:
publicclassThreadTestimplementsRunnable{
publicsynchronizedvoidrun(){
for(inti=0;i<10;i++){
System.out.print(""+i);
}
}
publicstaticvoidmain(String[]args){
Runnabler=newThreadTest();
Threadt1=newThread(r);
Threadt2=newThread(r);
t1.start();
t2.start();
}
}
以上是“java中的线程[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |