首页 > 编程语言 >Java高级-线程池

Java高级-线程池

时间:2024-07-09 09:26:13浏览次数:20  
标签:count Java name Executors 高级 submit 线程 public

1.什么是线程池?

用于管理线程对象的池子。

2.为什么使用线程池?

一个线程大约占用内存1M。

  1.解决频繁创建线程和销毁线程消耗的性能。

  2.解决大量创建线程而导致的内存泄漏问题。

3.如何创建线程池?

Java中提供了两种方式:

第一种:通过工具类完成线程池的创建-:语法简单,但是阿里巴巴不建议使用

第二种:通过线程池类-ThreadPoolWxecutor类:语法复杂,但是阿里巴巴建议使用,灵活

第一种:Executors

固定大小的线程池对象:Executors.newFixedThreadPool()

单一线程池:Executors.newSingleThreadExecutor()

可变线程池:Executors.newCachedThreadPool()

延迟线程池:Executors.newScheduledThreadPool()

第二种:ThreadPoolWxecutor

4.execute和submit方法的区别?

这两个方法都是用来执行线程任务,但是execute属于executor类中的方法,而submit属于ExecutorService接口中的方法。而且submit可以执行runnable和callable类型的任务,而execute只能执行runnable类型的任务,submit执行完成任务后有返回结果。

5.案例

public class MyTask implements Runnable{
    private static int count=0;
    private String name;
    public MyTask(String name){
        this.name=name;
    }
    @Override
    public void run() {
        System.out.println(name+"进入秒杀系统");
        synchronized (MyTask.class){
            if (count>0){
                System.out.println(name+"抢到了"+count+"号手机,秒杀成功");
                count--;
            }else {
                System.out.println(name+"秒杀失败");
            }
        }
    }
}
public class MyTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for (int i = 1; i <=20; i++) {
            MyTask myTest = new MyTask("客户:"+i);
            executorService.submit(myTest);
        }
    }
}

标签:count,Java,name,Executors,高级,submit,线程,public
From: https://blog.csdn.net/R202471/article/details/140285173

相关文章

  • JAVA基础-----128陷阱
    一、何为128陷阱Java中Integer类型在使用==比较时的特殊行为------128陷阱,解释了当数值在-128到127范围内,由于valueOf方法的缓存机制导致地址相同,比较为真;超出这个范围则新分配内存,地址不同,比较为假。可以预测一下下面程序的输出结果:答案在最后后面!二、造成该现象的原因......
  • javaMap笔记分享
    Map映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。13.1 支持映射的接口接 口描 述Map将唯一键映射到值NavigableMap扩展SortedMap接口,以处理基于最接近匹配搜索原则的键/值对检索So......
  • java集合笔记分享
    集合 前言集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?集合和数组的区别:   数组的长度是固定的。集合的长度是可变的。   数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的......
  • Java核心技术学习笔记(五)
    一、ArrayList,LinkedList,Vector的相同点与区别Java集合框架提供多种数据结构,其中ArrayList、LinkedList和Vector是常用列表实现。它们具有共同特性,如实现List接口、有序性和可动态调整大小,但也存在底层数据结构、线程安全性和性能等方面的区别。选择哪种集合取决于具体使用场景。......
  • Java--多态
    1.多态为同一方法根据发送对象的不同而采用多种不同的行为方式2.一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多3.多态存在的条件    1.有继承关系    2.子类重写父类方法    3.父类引用指向子类对象4.多态是方法的多态,属性没有多......
  • Java--方法重写
    1.方法的重写首先需要有继承关系,且为子类重写父类的方法2.方法名必须相同3.参数列表必须相同4.修饰符的范围可以扩大但不能缩小,public>protected>default>private,即父类的属性可以从private改为public,但不能反过来5.抛出的异常,范围可以被缩小,但不能被放大,如classnotfound-......
  • 7.8JAVA练习
    今天练了两道练习题,主要涉及知识点是面向对象的知识,包括类的创建,类的构造函数创建,对象数组创建,键盘录入等,练习代码如下,今天就到这里,明天继续加油!1.练习一:商品管理2.练习二:汽车类以上代码全为个人手写,有不合适的地方希望博友们多多指正,指引我不断前进。......
  • WebUi爬虫自动化测试 Selenium4.X+Java教程
    为什么要学习Selenium自动化测试Selenium是最受欢迎的Web应用程序自动化测试工具之一。通过学习Selenium,可以编写自动化测试脚本,用于自动执行各种任务,例如验证功能、测试用户界面、模拟用户交互大大提高测试效率,减少手动测试的工作量。网络爬虫Selenium可以用......
  • 嵌入式C语言面试相关知识——CPU、进程和线程相关(相关问题很多,会经常过来更新)
    嵌入式C语言面试相关知识——CPU、进程和线程相关一、博客声明二、自问题目——CPU相关1、什么是中断?如何处理中断?2、解释上下文切换(ContextSwitch)?3、在嵌入式中如何优化CPU使用?三、自问题目——进程相关1、什么是进程?2、嵌入式系统中进程和线程的区别是什么?3、在嵌......
  • 【Javascript】微信小程序项目结构目录详解
    我白天是个搞笑废物表演不在乎夜晚变成忧伤怪物撕扯着孤独我曾经是个感性动物小心地感触现在变成无关人物                     ......