在Java中, 多线程的实现有两种方式:
扩展java.lang.Thread类
实现java.lang.Runnable接口
方法1
扩展java.lang.Thread类
实现java.lang.Runnable接口
方法1
/**
* @Description: 继承Thread类, 实现多线程.
* @author snoopy
* @blog http://blog.csdn.net/huang_xw
*/
package basic.a_start;
import org.apache.log4j.Logger;
public class TestThread extends Thread {
private static Logger logger = Logger.getLogger(TestThread.class);
public static void main(String[] args) {
TestThread test = new TestThread();
logger.debug("在Main线程中启动线程!");
test.start();
}
public void run() {
logger.debug("在线程中运行!");
}
}
方法2
/**
* @Description: 测试Runnable类实现的多线程程序
* @author snoopy
* @blog http://blog.csdn.net/huang_xw
*/
package basic.a_start;
import org.apache.log4j.Logger;
public class TestRunnable {
private static Logger logger = Logger.getLogger(TestRunnable.class);
public static void main(String[] args) {
// 1. 将任务处理代码移到实现了Runnable接口的类的run方法中。
// 2. 创建任务类的一个对象
// 3. 由Runnable创建Thread对象
// 4. 启动线程
ImpRunnable r1 = new ImpRunnable();
ImpRunnable r2 = new ImpRunnable();
// 给线程命名有两种方式
// 1.虚拟机命名 2.用Thread类的构造方法
Thread t1 = new Thread(r1, "线程1");
Thread t2 = new Thread(r2, "线程2");
t1.start();
t2.start();
}
}
class ImpRunnable implements Runnable {
private static Logger logger = Logger.getLogger(ImpRunnable.class);
// 当线程目标run()方法结束时该线程完成。
public void run() {
for (int i = 0; i < 10; i++) {
// for循环用来模拟一个耗时的操作
for (long k = 0; k < 100000000; k++)
;
// 获取当前线程的对象的方法是: Thread.currentThread()
logger.debug(Thread.currentThread().getName() + " 运行" + ": 第" + i + "次");
}
}
}