java基础之线程池,线程组

目录

一:线程组

1:概念

2:用法

3:例子

二:线程池

1:概念

2:特点

3:创建线程池以及线程池主要方法

4:例子


一:线程组

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();//结束


    }
}

猜你喜欢

转载自blog.csdn.net/weixin_50691399/article/details/121215425