目录
一:线程组
1:概念
Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理
Java中使用ThreadGroup来表示线程组, 它可以对一批线程进行分类管理, Java允许程序直接对线程组进行控制的
2:用法
(1)构造方法和主要需要的方法
ThreadGroup(String name)
构造一个新的线程组。
ThreadGroup(ThreadGroup parent, String name)
创建一个新的线程
getName()
返回此线程组的名称。
(2)Java允许程序直接对线程组进行控制。(例如设置守护线程可以放一个组里直接全部设置)
默认情况下,所有的线程都属于主线程组。
public final ThreadGroup getThreadGroup()
(3)我们也可以给线程设置分组
Thread(ThreadGroup group, Runnable target, String name)
3:例子
package day33;
public class RunnableTest implements Runnable {//自定义一个类实现Runnable接口,重写run方法
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"**"+i);
}
}
}
package day33;
import day32.RunnableThread;
public class TreadGroup {
public static void main(String[] args) {
RunnableThread runnableThread = new RunnableThread();//创建自定义类对象
//创建两个线程
Thread t1 = new Thread(runnableThread, "线程1");
Thread t2 = new Thread(runnableThread, "线程2");
//获取默认线程组名
ThreadGroup threadGroup = t1.getThreadGroup();
System.out.println(threadGroup.getName());
//创建两个线程在同一个组中加入同一个线程组中
ThreadGroup g = new ThreadGroup("第一组");
Thread s = new Thread(g,runnableThread, "s");
Thread s1 = new Thread(g,runnableThread, "s1");
//获取线程组名字
System.out.println(s.getThreadGroup().getName());
}
}
二:线程池
1:概念
程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。
2:特点
线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池
3:创建线程池以及线程池主要方法
1、创建线程池对象,Executors工厂类下的静态方法,newFixedThreadPool是其中一种线程池 public static ExecutorService newFixedThreadPool(int nThreads)
2:方法
Future submit(Runnable task)
提交一个可运行的任务执行,并返回一个表示该任务的未来
pool.shutdown();结束线程池
线程池被关闭,不能重复提交运行。
4:例子
package day33;
public class RunnableTest implements Runnable {//自定义一个类实现Runnable接口,重写run方法
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"**"+i);
}
}
}
package day33;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPool {
public static void main(String[] args) {
RunnableTest runnableTest = new RunnableTest();//创建自定义对象
ExecutorService executorService = Executors.newFixedThreadPool(2);//定义一个线程池指定大小
executorService.submit(runnableTest);//提交一个任务
executorService.shutdown();//结束
}
}