一 继承Thread线程
/**
* 方式一: 继承Thread 的方式实现线程
* @author xzb_l
*
*/
public class ThreadDemo extends Thread{
private int pauseTime; // 间隔时间
private String name;
public ThreadDemo(int pauseTime, String name) {
this.pauseTime = pauseTime;
this.name = name;
}
@Override
public void run() {
while (true) {
try {
System.out.println("name=" + this.name + "date:" + new Date());
// 睡眠
Thread.sleep(this.pauseTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadDemo t1 = new ThreadDemo(3000, "我是第一");
ThreadDemo t2 = new ThreadDemo(5000, "我是第二");
t1.start();
t2.start();
}
}
二 实现Runnable接口
/**
* 实现Runnable接口
* @author xzb_l
*
*/
public class ThreadDemo02 implements Runnable {
private int pauseTime;
private String name;
public ThreadDemo02(int pauseTime, String name) {
this.pauseTime = pauseTime;
this.name = name;
}
@Override
public void run() {
while (true) {
try {
System.out.println(this.name +"-------" + new Date());
Thread.sleep(this.pauseTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new ThreadDemo02(3000, "我是第一"));
Thread t2 = new Thread(new ThreadDemo02(5000, "我是第二"));
t1.start();
t2.start();
}
}
三 匿名内部类的方式
/**
* 匿名内部类的方式
* @author xzb_l
*
*/
public class ThreadDemo03 {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
int i = 0;
while ( i < 10) {
System.out.println(System.currentTimeMillis() + "------" + i);
i++;
}
}
}).start();
}
}
四 定时器Timer
/**
* 定时器的方式
* @author xzb_l
*
*/
public class ThreadDemo04 {
public static void main(String[] args) {
Timer time = new Timer();
time.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("每隔5秒我说这句话..");
}
}, new Date(), 5000);
}
}
五 带返回值的线程回调
/**
* 带返回值回调的线程
* @author xzb_l
*1. 创建一个类实现Callable接口,实现call方法。这个接口类似于Runnable接口,但比Runnable接口更加强大,增加了异常和返回值。
2. 创建一个FutureTask,指定Callable对象,做为线程任务。
3. 创建线程,指定线程任务。
4. 启动线程
*/
public class ThreadDemo05 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 线程回调
Callable<String> callable = new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("线程开始执行....");
return "我是返回值...";
}
};
// 线程任务
FutureTask<String> futureTask = new FutureTask<>(callable);
// 穿件线程,执行任务
Thread thread = new Thread(futureTask);
thread.start();
System.out.println("----" + futureTask.get());
}
}
六 线程池
/**
* 基于线程池的方式实现
* @author xzb_l
*
*/
public class ThreadDemo06 {
public static void main(String[] args) {
// 创建池
ExecutorService threadPool = Executors.newFixedThreadPool(10);
while (true) {
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + "---正在运行---");
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}