Thread类和Runnable接口
兩者都可以實(shí)現(xiàn)多線程,那么兩者的區(qū)別和聯(lián)系有哪些?
Thread類(lèi)的定義。
public ?class ?Thread ?extends Object implements ?Runnable
從Thread類(lèi)的定義可以清楚的發(fā)現(xiàn),Thread類(lèi)也是Runnable接口的子類(lèi),但是Thread類(lèi)中并沒(méi)有完全地實(shí)現(xiàn)Runnable接口中的run()方法,
區(qū)別:如果一個(gè)類(lèi)繼承Thread類(lèi),則不適合于多個(gè)線程共享資源,而實(shí)現(xiàn)了Runnable接口,就可以方便地實(shí)現(xiàn)資源的共享。
范例:繼承Thread不能共享資源
package ThreadDemo01;class MyThread2 extends Thread {private int ticket = 5;public void run() { // 覆寫(xiě)Thread類(lèi)的run()方法for (int i = 0; i < 100; i++) {if (ticket > 0) {System.out.println("買(mǎi)票:tick=" + ticket--);}}} }public class ThreadDemo04 {public static void main(String[] args) {MyThread2 mt1 = new MyThread2();// 創(chuàng)建線程對(duì)象1MyThread2 mt2 = new MyThread2();// 創(chuàng)建線程對(duì)象2MyThread2 mt3 = new MyThread2();// 創(chuàng)建線程對(duì)象3mt1.start();// 啟動(dòng)線程1mt2.start();// 啟動(dòng)線程2mt3.start();// 啟動(dòng)線程3} }結(jié)果:
買(mǎi)票:tick=5
買(mǎi)票:tick=4
買(mǎi)票:tick=3
買(mǎi)票:tick=2
買(mǎi)票:tick=1
買(mǎi)票:tick=5
買(mǎi)票:tick=4
買(mǎi)票:tick=3
買(mǎi)票:tick=2
買(mǎi)票:tick=1
買(mǎi)票:tick=5
買(mǎi)票:tick=4
買(mǎi)票:tick=3
買(mǎi)票:tick=2
買(mǎi)票:tick=1
范例:Runnable可以實(shí)現(xiàn)資源共享
package test1;class MyThread implements Runnable {private int ticket = 5;public void run() {for (int i = 0; i < 100; i++) {if (ticket > 0) {System.out.println("買(mǎi)票:ticket=" + ticket--);}}} }public class ThreadDemo02 {public static void main(String[] args) {MyThread mt1 = new MyThread(); // 創(chuàng)建線程對(duì)象new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start(); // 啟動(dòng)了7個(gè)線程} }結(jié)果:
買(mǎi)票:ticket=5
買(mǎi)票:ticket=4
買(mǎi)票:ticket=3
買(mǎi)票:ticket=2
買(mǎi)票:ticket=1
雖然啟動(dòng)了7個(gè)線程,但是指賣(mài)出了五張票
使用Runnable的好處是:
1.適合多個(gè)相同程序代碼的線程去處理同一資源的情況
2.可以避免由與java的單繼承特性帶來(lái)的局限性
3.增強(qiáng)了程序的健壯性,代碼能夠被多線程共享代碼與數(shù)據(jù)獨(dú)立
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/bokun-wang/archive/2011/12/08/2281203.html
總結(jié)
以上是生活随笔為你收集整理的Thread类和Runnable接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【优化调度】基于人工鱼群算法求解梯级水库
- 下一篇: 【转】CMMI环境下,该如何实施Agil