当我们在做java开发的时候,经常需要自己编写一个线程类来实现自己的逻辑,我们知道实现线程有两种方式:
1. 类继承Thread类,重载run方法即可
2.继承Runnable接口,实现run方法
当我们用第一种方法实现自己的线程的时候,我们新写的线程类就不可以继承其他的类了,这是由于java中的线程是单继承的关系导致的。如果我们在编写自己线程类的时候,同时还想我们这个线程类继承别的类,那么可以采用第2种方法,因为第2中方法是实现接口,所以还可以继承其他类。下面编写了2个类,MyThreadExtendsThread继承Thread;MyThreadImplementsRun 实现Runnable接口,这两个类都是ThreadTest 的静态内部类。具体代码如下:
package com.test.thread;
/**
* 测试线程的相关代码
*
* @author rey
*
*/
public class ThreadTest {
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
testExtendThread();
}
/**
* 测试继承Thread类的线程
*
* @throws InterruptedException
*/
private static void testExtendThread() throws InterruptedException {
// 1.继承Thread类的线程
MyThreadExtendsThread myThread = new MyThreadExtendsThread(1);
myThread.run(); // 当前线程[1]::com.test.thread.ThreadTest$MyThreadExtendsThread
// 2.继承runnable的线程
MyThreadImplementsRun myThreadRun = new MyThreadImplementsRun(2);
myThreadRun.run();// runnable接口的线程[Id=2]:::com.test.thread.ThreadTest$MyThreadImplementsRun
}
/**
* 继承Thead实现线程
*
* @author rey
*
*/
private final static class MyThreadExtendsThread extends Thread {
private int m_nThreadId;
public MyThreadExtendsThread() {
super();
}
public MyThreadExtendsThread(int _threadId) {
super();
m_nThreadId = _threadId;
}
public String toString() {
return "当前线程Id:::" + this.m_nThreadId;
}
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
public void run() {
System.out.println("当前线程[" + this.m_nThreadId + "]::"
+ this.getClass().getName());
}
}
/**
* 继承runnable接口,实现线程
*
* @author rey
*
*/
private final static class MyThreadImplementsRun implements Runnable {
private int m_nThreadId;
public MyThreadImplementsRun(int _threadId) {
super();
m_nThreadId = _threadId;
}
public String toString() {
return "当前线程Id:::" + this.m_nThreadId;
}
@Override
public void run() {
System.out.println("runnable接口的线程[Id=" + this.m_nThreadId + "]:::"
+ this.getClass().getName());
}
}
}