四种线程方法
1.继承Thread类
2.实现Runable方法
3.实现Callable方法
4.线程池
其中实现Callable的优点:1.有返回值。2.能抛出异常。3.可支持泛型。
线程池优点儿:
1.提高响应速度,线程池的线程建立后不会自动死亡,需手动shutdown才会死亡,线程一调用马上线程池的线程就可以响应。
2.降低资源消耗,可以重复利用线程池之前调用过的线程,不需要每次都创建。
3.便于线程管理,但是需要手动关闭线程池。
public class PoolTest {
public static void main(String[] args) {
ExecutorService Pool = Executors.newFixedThreadPool(3);
Pool.execute(new ThreadTest());
Pool.execute(new RunableTest());
CallableTest t = new CallableTest();
FutureTask<Integer> t2 = new FutureTask<Integer>(t);
Pool.submit(t2);
try {
Integer qq = t2.get();
System.out.println(qq);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
Pool.shutdown();
}
}
class ThreadTest extends Thread{
@Override
public void run() {
for (int i = 0; i < 100 ; i++) {
if(i%2 == 0)
{
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class RunableTest implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100 ; i++) {
if(i%2 != 0)
{
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
class CallableTest implements Callable<Integer>{
int sum = 0;
@Override
public Integer call() throws Exception {
for(int i=2;i<100;i++) {
boolean flag=true;
for(int j=2;j<Math.sqrt(i);j++) {
if(i%j == 0) {
flag=false;
break;
}
}
if(flag) {
sum +=i;
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
return sum;
}
}