线程组
线程组默认为主线程
public class Test {
public static void main(String[] args) {
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr, "张三");
Thread t2 = new Thread(mr, "李四");
ThreadGroup tg1 = t1.getThreadGroup();
ThreadGroup tg2 = t2.getThreadGroup();
//线程组默认为主线程
System.out.println(tg1.getName());
System.out.println(tg2.getName());
}
}
线程的另一种构造方法:
ThreadGroup group = new ThreadGroup("我是新的线程组");
Runnable mr = new MyRunnable();
//将线程放入组中
Thread t1 = new Thread(group, mr, "线程1");
Thread t2 = new Thread(group, mr, "线程2");
//可以按照组进行设置线程为守护线程
t1.setDaemon(true);
//获取组名
System.out.println(t1.getThreadGroup().getName());
System.out.println(t2.getThreadGroup().getName());
线程池
线程池的创建和简单的使用
public class ThreadPool {
public static void main(String[] args) {
//获取固定大小的线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
pool.submit(new MyRunnable());
pool.submit(new MyRunnable());
//执行完毕之后会将线程池关闭
pool.shutdown();
}
}
利用线程池
import java.util.concurrent.Callable;
public class MyCallable implements Callable {
private int num;
public MyCallable() {
}
public MyCallable(int num) {
this.num = num;
}
@Override
public Object call() throws Exception {
int sum = 0;
for (int i = 0; i < num + 1; i++) {
sum += i;
}
return sum;
}
}
public class ThreadPool2 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService pool = Executors.newFixedThreadPool(2);
Future<Integer> submit1 = pool.submit(new MyCallable(100));
Future<Integer> submit2 = pool.submit(new MyCallable(40));
System.out.println(submit1.get());
System.out.println(submit2.get());
pool.shutdown();
}
}