创建并启动线程的三种方法
2018-03-14 21:07
232 查看
方法一:public class Demo extends Thread {
public void run() {
int i=0 ;
for( ;i<100;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
public static void main(String[] args) {
for(int i=0 ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if(i==20) {
new Demo().start();
new Demo().start();
}
}
}
}
方法二:public class Demo implements Runnable {
@Override
public void run() {
int i=0 ;
for(;i<100;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
public static void main(String[] args) {
for(int i=0 ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if(i==20) {
Demo target = new Demo() ;
new Thread(target, "新线程2").start();
new Thread(target, "新线程2").start();
}
}
}
}方法三:import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Demo {
public static void main(String[] args) throws Exception {
FutureTask<Integer> futureTask = new FutureTask<>((Callable<Integer>)() -> {
int i=0 ;
for(;i<100;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
return i ;
}) ;
for(int i=0 ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if(i==20) {
new Thread(futureTask, "有返回值线程1").start();
new Thread(futureTask, "有返回值线程2").start();
}
}
System.out.println("返回值为:" + futureTask.get()); ;
}
}
public void run() {
int i=0 ;
for( ;i<100;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
public static void main(String[] args) {
for(int i=0 ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if(i==20) {
new Demo().start();
new Demo().start();
}
}
}
}
方法二:public class Demo implements Runnable {
@Override
public void run() {
int i=0 ;
for(;i<100;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
}
public static void main(String[] args) {
for(int i=0 ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if(i==20) {
Demo target = new Demo() ;
new Thread(target, "新线程2").start();
new Thread(target, "新线程2").start();
}
}
}
}方法三:import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Demo {
public static void main(String[] args) throws Exception {
FutureTask<Integer> futureTask = new FutureTask<>((Callable<Integer>)() -> {
int i=0 ;
for(;i<100;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
}
return i ;
}) ;
for(int i=0 ;i<100 ;i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if(i==20) {
new Thread(futureTask, "有返回值线程1").start();
new Thread(futureTask, "有返回值线程2").start();
}
}
System.out.println("返回值为:" + futureTask.get()); ;
}
}
相关文章推荐
- JAVA创建线程的三种方法
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- Java创建线程的三种方法比较及用法
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- 创建线程的三种方法
- JAVA中创建线程的三种方法及比较
- 启动一个线程的三种方法
- c++11多线程编程(一):创建线程的三种方法
- Java创建线程的三种方法比较
- 创建线程的三种方法
- iOS NSThread 的三种创建线程的方法 非常简单好用
- 创建线程的三种方法
- 创建线程的几种方式,以及为什么启动线程不用run,而用start方法。
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- Java线程的三种三种创建和启动
- 线程间操作无效:从不是创建控件的线程访问它的三种方法
- 创建线程的三种方法
- VC启动一个新线程的三种方法
- 创建线程的三种方法
- Java 创建线程的三种方法比较