java+单例对多线程的影像_Java——单例模式、多线程

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

import java.util.concurrent.FutureTask;

/**

* JAVA三种方式实现多线程

* @author Administrator

*

*/

public class ThreadTest implements Runnable,Callable{

public static void main(String[] args) throws InterruptedException, ExecutionException {

// TODO Auto-generated method stub

//主线程打印

// System.out.println("线程编号:"+Thread.currentThread().getId());

// new ThreadA().start();

// Thread thread=new Thread(){

// public void run() {

// System.out.println(Thread.currentThread().getId()+"线程正在运行");

// }

// };

// thread.start();

ThreadTest t=new ThreadTest();

// new Thread(t).start();

// new Thread(new Runnable() {

//

// @Override

// public void run() {

// // TODO Auto-generated method stub

// System.out.println(Thread.currentThread().getId()+"线程正在运行");

// }

// }).start();

//Runnable

// FutureTask task=new FutureTask(t);

// new Thread(task).start();

// //获取call方法返回的内容

// System.out.println(task.get());

//线程池内线程最大数量

int threadMaxCount=10;

//线程池

ExecutorService service=Executors.newFixedThreadPool(threadMaxCount);

//定义一个集合存储runnable

List> list=new ArrayList>();

//开始运行10个线程(这10个多线程是由线程池管理的)

for(int i=0;i

FutureTask task=new FutureTask(t);

//submit把runnable提交给了线程池

Future f=(Future) service.submit(task);

list.add(task);

}

// service.shutdown();

for(int i=0;i

Future f=list.get(i);

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

}

}

/**

* 2.实现Runnable接口

* 必须重写run方法

* 创建Thread对象,把runnable传递到构造中

* (匿名实现类)

*/

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println(Thread.currentThread().getId()+"线程正在运行");

}

/**

* 3.实现Callable接口

* 重写call方法

* 使用FutureTask类来实现Runnable

* (FutureTask是Runnable的实现类)

* 创建Thread对象,把FutureTask当作Runnable调用了构造参数

* call方法的返回值可以通过FutureTask.get方法得到

* (get方法必须在线程运行之后才可以调用)

* 线程池配合使用比较好

*/

@Override

public String call() throws Exception {

// TODO Auto-generated method stub

String str=Thread.currentThread().getId()+"线程正在运行";

// System.out.println(str);

return str;

}

}

/**

* 1.继承Thread类

* 重写run方法

* (匿名类方式实现)

* @author Administrator

*

*/

class ThreadA extends Thread{

/**

* 当线程start时,会执行run

*/

@Override

public void run() {

// super.run();

// TODO Auto-generated method stub

System.out.println(Thread.currentThread().getId()+"线程正在运行");

}

}

你可能感兴趣的:(java+单例对多线程的影像)