创建线程的四种方式
一:继承Thread类来创建线程
class MyThread extends Thread{
public void run() {
for (int i = 0; i < 25; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
//创建对象
MyThread myThread1=new MyThread();
MyThread myThread2=new MyThread();
//修改线程名
myThread1.setName("线程1");
myThread2.setName("线程2");
//启动线程
myThread1.start();
myThread2.start();
}
}
其Thread类也是继承了Runnable接口,下面就来看Runnable接口
二:实现Runnable接口来创建线程
class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 25; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class RunnableTest {
public static void main(String[] args) {
//创建对象
MyThread myThread=new MyThread();
//创建线程并启动
new Thread(myThread,"线程1").start();
new Thread(myThread,"线程2").start();
}
}
三:实现Callable接口创建线程
class MyCallable implements Callable<Integer>{
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
int i=0;
for (i = 0; i < 25; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
return i;
}
}
public class CallableTest {
public static void main(String[] args) throws Exception {
//创建对象
MyCallable callable=new MyCallable();
//创建FutureTask类
FutureTask<Integer> futureTask=new FutureTask<Integer>(callable);
//创建线程并启动
new Thread(futureTask,"线程1").start();
new Thread(futureTask,"线程2").start();
//返回值
System.out.println(futureTask.get());
}
}
与Runnable接口最大的区别就是具有返回值futureTask.get()
四:线程池
此方式看下一篇文章