Runnable与Thread的关系
1.Thread是一个类,Runnable是一个接口。Thread实现了Runnable这个接口。
2.实现Runnable接口可以避免Thread单继承的缺陷。因为当一个类已经继承一个父类了,它还要实现多线程的功能,这个时候Runnable就可以解决这种情况。
3.如果有复杂的线程操作需求,继承Thread比较好。内容比较简单,就实现Runnable。
Runnable实现代码
例子记录兔兔吃了多少胡萝卜
public class test {
public static void main(String[] args) {
Thread t=new Thread(new TestThread());
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class TestThread implements Runnable {
int index=1;
public void run() {
while (true) {
if (index <= 20) {
System.out.println("run():" + Thread.currentThread().getName() + "---兔兔吃了第" + index++ + "根胡萝卜");
} else {
break;
}
}
}
}
我运行十来次就出现了第1根萝卜被吃了两次,怎么解决这个问题呢,可以用利用synchronized实现同步。
public class test {
public static void main(String[] args) {
Thread t=new Thread(new TestThread());
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class TestThread implements Runnable {
int index=1;
public synchronized void run() {
while (true) {
if (index <= 20) {
System.out.println("run():" + Thread.currentThread().getName() + "---兔兔吃了第" + index++ + "根胡萝卜");
} else {
break;
}
}
}
}
如此,就可以得到没有错误的输出结果。