700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android开发之多线程编程Thread和Runnable使用

Android开发之多线程编程Thread和Runnable使用

时间:2019-01-10 15:42:34

相关推荐

Android开发之多线程编程Thread和Runnable使用

Android开发之多线程编程Thread和Runnable使用

Android可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;前者只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是Java中一个类只能继承一个父类,这是这种方式的局限性,后者只需要实现一个接口而已,Java中可以实现多个接口。

继承Thread类

[java]view plaincopypackagecom.vixtel.tools; /** *@authoryangxiaolong *@-7-28 */ publicclassSyncThreadextendsThread{ @Override publicvoidrun(){ synchronized(this){ for(inti=0;i<5;i++){ System.out.println(Thread.currentThread().getName() +"synchronizedloop"+i); } } } }

运行:[java]view plaincopySyncThreadst1=newSyncThread(); SyncThreadst2=newSyncThread(); st1.start(); st2.start();

Runnable接口[java]view plaincopypackagecom.vixtel.tools; /** *@authoryangxiaolong *@-7-28 */ publicclassSyncRunnableimplementsRunnable{ @Override publicvoidrun(){ synchronized(this){ for(inti=0;i<5;i++){ System.out.println(Thread.currentThread().getName() +"synchronizedloop"+i); } } } }

执行:[java]view plaincopySyncRunnablesr1=newSyncRunnable(); SyncRunnablesr2=newSyncRunnable(); Threadtd1=newThread(sr1,"td1"); Threadtd2=newThread(sr2,"td2"); //多个Thread也可以同时使用一个Runbale, //由于多个Thread操作同一个Runnable对象,这样同步锁就需要使用了 td1.start(); td2.start();

接下来使用经典的模拟火车卖票程序,来理解Thread和Runnable在特定场景下的区别和联系,以及synchronized在线程中的作用:

[java]view plaincopyclassAutoSaleTicketimplementsRunnable{ privateintticket=20; publicvoidrun(){ while(true){//循环是指线程不停的去卖票 //当操作的是共享数据时,用同步代码块进行包围起来,这样在执行时,只能有一个线程执行同步代码块里面的内容 synchronized(this){ if(ticket>0){ //不要在同步代码块里面sleep,作用只是自已不执行,也不让线程执行 System.out.println(Thread.currentThread().getName() +"卖出第"+(20-ticket+1)+"张票"); ticket--; }else{ break; } } //所以把sleep放到同步代码块的外面,这样卖完一张票就休息一会,让其他线程再卖,这样所有的线程都可以卖票 try{ Thread.sleep(200); }catch(Exceptionex){ } } } }

我们开始执行售票程序:[java]view plaincopyAutoSaleTicketticket=newAutoSaleTicket(); Threadt1=newThread(ticket,"东城代售"); Threadt2=newThread(ticket,"西城代售"); Threadt3=newThread(ticket,"朝阳代售"); Threadt4=newThread(ticket,"海淀代售"); t1.start(); t2.start(); t3.start(); t4.start();

结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。