导航:首页 > 编程语言 > java线程与线程池

java线程与线程池

发布时间:2022-01-21 15:05:28

1. 简述java线程池的组成与作用

组成和作用两者之间是一个相互进行的故障,编码程序问题。

2. java 什么是线程池及为什么要使用线程池

创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java
API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)。

3. java线程池(一) 简述线程池的几种使用方式

首先说明下java线程是如何实现线程重用的
1. 线程执行完一个Runnable的run()方法后,不会被杀死
2. 当线程被重用时,这个线程会进入新Runnable对象的run()方法12

java线程池由Executors提供的几种静态方法创建线程池。下面通过代码片段简单介绍下线程池的几种实现方式。后续会针对每个实现方式做详细的说明
newFixedThreadPool
创建一个固定大小的线程池
添加的任务达到线程池的容量之后开始加入任务队列开始线程重用总共开启线程个数跟指定容量相同。
@Test
public void newFixedThreadPool() throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService = Executors.newFixedThreadPool(1, new ThreadFactoryBuilder().build());
RunThread run1 = new RunThread("run 1");
executorService.execute(run1);
executorService.shutdown();
}12345678

newSingleThreadExecutor
仅支持单线程顺序处理任务
@Test
public void newSingleThreadExecutor() throws Exception {
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().build());
executorService.execute(new RunThread("run 1"));
executorService.execute(new RunThread("run 2"));
executorService.shutdown();

}123456789

newCachedThreadPool
这种情况跟第一种的方式类似,不同的是这种情况线程池容量上线是Integer.MAX_VALUE 并且线程池开启缓存60s
@Test
public void newCachedThreadPool() throws Exception {
ExecutorService executorService = Executors.newCachedThreadPool();
executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().build());
executorService.execute(new RunThread("run 1"));
executorService.execute(new RunThread("run 2"));
executorService.shutdown();

}123456789

newWorkStealingPool
支持给定的并行级别,并且可以使用多个队列来减少争用。
@Test
public void newWorkStealingPool() throws Exception {
ExecutorService executorService = Executors.newWorkStealingPool();
executorService = Executors.newWorkStealingPool(1);
RunThread run1 = new RunThread("run 1");
executorService.execute(run1);
executorService.shutdown();

}123456789

newScheledThreadPool
看到的现象和第一种相同,也是在线程池满之前是新建线程,然后开始进入任务队列,进行线程重用
支持定时周期执行任务(还没有看完)
@Test
public void newScheledThreadPool() throws Exception {
ExecutorService executorService = Executors.newScheledThreadPool(1);
executorService = Executors.newScheledThreadPool(1, new ThreadFactoryBuilder().build());
executorService.execute(new RunThread("run 1"));
executorService.execute(new RunThread("run 2"));
executorService.shutdown();

}

4. java 线程组和线程池的作用

1:提高效率 创建好一定数量的线程放在池中,等需要使用的时候就从池中拿一网络编程也是自己一直都想去系统的学习的东西。而且,在java nio中有很多和

5. java的信号量和线程池的区别

线程组:线程组存在的意义,首要原因是安全。java默认创建的线程都是属于系统线程组,而同一个线程组的线程是可以相互修改对方的数据的。但如果在不同的线程组中,那么就不能“跨线程组”修改数据,可以从一定程度上保证数据安全。 线程池:线程池存在的意义,首要作用是效率。线程的创建和结束都需要耗费一定的系统时间(特别是创建),不停创建和删除线程会浪费大量的时间。所以,在创建出一条线程并使其在执行完任务后不结束,而是使其进入休眠状态,在需要用时再唤醒,那么 就可以节省一定的时间。如果这样的线程比较多,那么就可以使用线程池来进行管理。保证效率。 线程组和线程池共有的特点:1,都是管理一定数量的线程2,都可以对线程进行控制---包括休眠,唤醒,结束,创建,中断(暂停)--但并不一定包含全部这些操作。

6. 由浅入深理解Java线程池及线程池的如何使用

重要的特征也就是最大程度利用线程.
首先,创建线程本身需要额外(相对于执行任务而必须的资源)的开销.
作业系统在每创建一个线程时,至少需要创建以下资源:
(1) 线程内核对象:用于对线程上下文的管理.
(2) 用户模式执行栈.
(3) 内核模式执行栈.
这些资源被线程占有后作业系统和用户都无法使用.
相反的过程,销毁线程需要回收资源,也需要一定开销.
其次,过多的线程将导致过度的切换.线程切换带来的性能更是不可估量.系统完成线程切换要经过以下过程:
(1) 从用户模式切换到内核模式.
(2) 将CPU寄存器的值保存到当前线程的内核对象中.
(3)打开一个自旋锁,根据调度策略决定下一个要执行的线程.释放自旋锁,如果要执行的线程不是同一进
程中的线程,还需要切换虚拟内存等进程环境.
(4) 将要执行的线程的内核对象的值写到CPU寄存器中.
(5) 切换到用户模式执行新线程的执行逻辑.
所以线程池的目的就是为了减少创建和切换线程的额外开销,利用已经的线程多次循环执行多个任务从而提
高系统的处理能力.

7. 关于java的线程池与同步之间的关系

1、java中线程同步了也就满足安全性。

2、web工程中每一个浏览器发出的http请求到达服务器的时候,服务器都会建立一个新的线程来处理请求,一般如果写的action中很少会有静态的变量。
a。如果没有静态变量(静态变量都是所有action中唯一的,这些变量属于类,而不是属于某一个实例,也就是说静态变量是实例间共享的),那就不用关心线程安全的问题。
b。如果有静态变量的话,就需要关心线程安全问题了。假设你的类中的方法会对静态变量进行操作。还有一种情况是你的类方法中如果对数据库进行操作的话为了保证操作的原子性则需要在方法上加上关键字synchronized 关键字就可以了。

3、线程如果不涉及到操作公共变量的时候就不要同步,否则就需要同步才能保证线程安全。

8. java的四种线程池哪个比较好

无法简单的说那个线程好,应该说适合用那个线程,这里有比较详细的介绍java的四内种线程池,可以根容据需求使用线程池。
http://blog.csdn.net/u011974987/article/details/51027795

9. Java服务 多个业务用一个线程池和一个业务使用一个线程池的优缺点

如果业务之间没有关联或同步的需要,这两种方法差不多。
如果有有关联或需要同步,一个线程池比较好实现。

10. java线程池的理解

线程池顾名思义是一个装着"线程"的池子,,它包含了很多已经启动好的并且处于睡眠状态的线程.当你有请求时,就会直接使用池子里面的线程而不用去创建.对于请求量很少的时候看起来没多少作用...但是当系统使用人数多了..请求数量很多的时候就会为系统节约大量的资源,让系统不去忙于线程的创建和销毁,,,而让系统更好的完成他的功能.

阅读全文

与java线程与线程池相关的资料

热点内容
旅游大数据建设方案 浏览:161
谷道网络技术有限公司 浏览:513
小米电视不能识别u盘apk文件 浏览:390
如何将摄像头的数据变高清 浏览:581
西青大数据 浏览:457
2016支付宝vs微信 浏览:745
移动g2f怎么进入3g网络 浏览:435
linux配置阿帕奇 浏览:18
音乐标签id3修改工具 浏览:589
数据频繁变化是什么 浏览:977
iphone来电壁纸 浏览:40
删除文件夹找不到指定路径怎么办 浏览:487
原力大数据招聘 浏览:479
数据线圆头什么意思 浏览:768
协和app怎么取号 浏览:664
c坐标转换代码 浏览:707
唐筛数据为什么能看出男女 浏览:44
快手java 浏览:835
qq分享的文件在哪里 浏览:226
爱念电影 浏览:656

友情链接