Java中的几种线程池详解 「爱情、让人受尽委屈。」 2021-11-16 14:01 311阅读 0赞 ### Attention ### 但是在多人合作或者是一些部署上线的项目里,是不允许去使用这种方法的,因为它是有性能隐患的。 Executors在创建线程池的时候,用的是 **new LinkedBlockingQueue () **,它这个队列本身是无边界的,但是线程是固定数量的。这就意味着,在程序运行的过程中,最多会有N个线程在处于活动状态。每次有新的任务来就会等待,直到有线程处于空闲状态。所有的线程都会处于线程池里里面,直到shutdown()的执行。 题目提供了一个Stack类让我们用,所以可以new一个该类的对象,这样栈的压栈、弹栈和返回顶部最大值的方法就可以直接调用Stack类的了。 可以再使用一个Stack对象,只要往栈中压入一个元素,就把该元素和目前栈中最小值元素进行比较,如果更小,就把压入的元素添加到记录最小值元素的栈中,否则就把记录最小值栈的栈顶元素再压一次。如果栈进行了弹栈操作,那么记录最小值元素的栈同样也进行弹栈操作即可,min函数就是将记录最小值元素的栈栈顶元素返回即可,但是不要弹出。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAxOTU2_size_16_color_FFFFFF_t_70][] ### CountDownLatch ### JDK 1.5之后会提供这个类, CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。 CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。 ### 对象转型(casting) ### 一个基类的引用类型变量可以“指向”其子类的对象。 一个基类的引用不可以访问其子类对象的新增成员(包括属性和方法)。 可以使用 “引用变量 instanceof 类名”来判断该引用类型变量所“指向”的对象是否属于该类或该类的子类。 子类对象可以当作基类的对象来使用,称作向上转型(upcasting),反之称为向下转型(downcasting) 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 5. 是否有一个全局视角来查看系统的运行状况? 6. 有什么办法可以监控到JVM的实时运行状态? 由于自己之前使用的是Gradle构建工具,最近切到Maven有些不太适应,特别是在java和groovy混编时,在打包jar包的过程中出现问题,困扰了很久,在网上查了一些资料,都是引入build插件即可,但是插件有的是eclipse的插件,进过分析和摸索终于得到了一个再intellij使用Maven打包混编项目的jar包的方法。 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.8</version> </dependency> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.okayqa.studentapd.T2</mainClass> <!-- 运行jar的main class --> </manifest> <!-- 添加本地的jar --> <manifestEntries> <!-- 这个>lib/class-util-1.0.jar 路径是已经被打包到target/lib里的,多个包用空格隔开就可以了 --> <Class-Path>/Users/fv/Documents/workspace/fun/build/libs/fun-1.0.jar</Class-Path> </manifestEntries> </archive> </configuration> </plugin> <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.2</version> <configuration> <providerSelection>1.7</providerSelection> </configuration> <dependencies> <dependency> <groupId>org.codehaus.gmaven.runtime</groupId> <artifactId>gmaven-runtime-1.7</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.7.0</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>generateStubs</goal> <goal>compile</goal> <goal>generateTestStubs</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ![aHR0cHM6Ly9pbWcwLnR1aWNvb2wuY29tL0ZWUjdqMjYuanBnIXdlYg][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAxOTU2_size_16_color_FFFFFF_t_70]: /images/20211116/34753cca51c64f69aea2252dac710a88.png [aHR0cHM6Ly9pbWcwLnR1aWNvb2wuY29tL0ZWUjdqMjYuanBnIXdlYg]: /images/20211116/f789b85c78e44521952cd3a76e8eae80.png
还没有评论,来说两句吧...