继承Thread
public class TestThread {
public static void main(String[] args) throws Exception {
Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.start();
t2.start();
}
}
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-MyThread -" + i);
}
}
}
实现 Runnable 接口
public class TestThread {
public static void main(String[] args) throws Exception {
Thread t1 = new Thread(new MyRunnable ());
Thread t2 = new Thread(new MyRunnable ());
t1.start();
t2.start();
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-MyRunnable -" + i);
}
}
}
}
匿名内部类
public class TestThread {
public static void main(String[] args) throws Exception {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + i);
}
}
},"Thread1").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + i);
}
}
},"Thread2").start();
}
}
函数式接口(java8新特性)
public class TestThread {
public static void main(String[] args) throws Exception {
new Thread(() -> {
for (int i = 0; i < 10; i++) System.out.println(Thread.currentThread().getName() + "-CallableDemo-" + i);
}, "Thread1").start();
}
}
实现Callable接口(concurrent包下新特性)
Callable接口实现call方法,配合FutureTask使用,有返回值,返回泛型指定的数据类型
与Runable不同的是
- 实现的是call()
- 有可能抛异常的
- 有返回值
- 需要FutureTask
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
class Mythread implements Callable<Integer>
{
@Override
public Integer call() throws Exception
{
System.out.println("*****come in call method()");
return 1024;
}
}
public class CallableDemo
{
public static void main(String[] args) throws ExecutionException, InterruptedException
{
FutureTask<Integer> futureTask = new FutureTask(new Mythread());
new Thread(futureTask,"A").start();
Integer result = futureTask.get();
System.out.println(result);
}
}