java线程经典代码_Java线程代码实现

线程的Java实现

1.继承Thread

声明Thread的子类; 这种方法是创建类继承Thread,然后重写Thread中的run方法

public class MyThread extends Thread {

public void run(){

System.out.println("MyThread running");

}

}

稍微看一下Thread类的源码,原本的run方法:

/* What will be run. */

private Runnable target;

@Override

public void run() {

if (target != null) {

target.run();

}

}

其中的target是run的任务,而新类直接继承Thread,重写run方法,相当于直接描述了run方法中要运行的任务。

运行Thread子类的方法

MyThread myThread = new MyThread();

myTread.start();

2.创建Thread的匿名子类

Thread thread = new Thread(){

public void run(){

System.out.println("Thread Running");

}

};

thread.start();

3.实现Runnable接口

其实通过上面的Thread源码可以发现,实现Runnable target的构建,那么Thread的run方法也就有了实际意义;因此另一个多线程的写法是新类实现Runnable接口

public class RunnableThread implements Runnable {

@Override

public void run() {

System.out.println(Thread.currentThread().getName());

}

}

运行

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {

new Thread(new RunnableThread()).start();

}

}

4.创建实现Runnable接口的匿名类

new Thread(new Runnable(){

@override

public void run() {

System.out.println("Thread is running");

}

}).start();

5. 使用FutureTask

FutureTask实现了Runnable接口,因此FutureTask的对象也是可以当做runner的;而FutureTask对象的构造需要填入一个实现Callable接口的对象,因此:

public class CallableThread implements Callable {

@Override

public Integer call() throws Exception {

int i = 2017;

Thread.sleep(3000);

System.out.println(Thread.currentThread().getName() + " " + i);

return i;

}

}

运行测试一下:

for (int i = 0; i < 5; i++) {

FutureTask futureTask = new FutureTask(new CallableThread());

new Thread(futureTask, "有返回值的线程").start();

try {

System.out.println(futureTask.get());

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ExecutionException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

但是这里有一个疑惑,就是输出是一个一个出来的,也就是看上去这五个线程是同步的,以后再研究一下,这块比较鬼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值