public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i <100 ; i++) {
System.out.println("hello 我是"+Thread.currentThread().getName());
}
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();//一个线程不能调用两次以上的start方法 IllegalThreadStateException
}
}
3.2、实现Runnable接口
public class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Runnable :"+ Thread.currentThread().getName());
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
//匿名内部类写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类"+Thread.currentThread().getName());
}
}).start();
//lambda表达式写法
new Thread(() ->{
System.out.println("lambda:"+Thread.currentThread().getName());
}).start();
}
}
3.3、实现Callable接口(有返回值)
public class MyCallable implements Callable<Long> {//需指定返回值类型
@Override
public Long call() throws Exception {
return 1+1L;
}
public static void main(String[] args) {
//创建MyCallable对象
MyCallable myCallable = new MyCallable();
//创建FutureTask对象
FutureTask<Long> futureTask = new FutureTask<>(myCallable);
//创建线程对象
Thread thread = new Thread(futureTask);
thread.start();
try {
System.out.println("获得结果:"+futureTask.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}