实际工作中,什么场景会用到多线程开发?
最典型的应用比如tomcat,tomcat内部采用的就是多线程,上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用到我们的servlet程序,比如doGet或者doPost方法。
如果不采用多线程机制,上百个人同时访问一个web应用的时候,tomcat就得排队串行处理了,那样客户端根本是无法忍受那种访问速度的。
还有就是需要异步处理的时候,需要使用多线程。比如taska和taskb要并行处理,单个线程只能串行处理,先做完taska然后再做taskb。如果想要多个task同时执行的话,就必须为每个task分配一个线程,然后通过java虚拟机的线程调度,来同时执行多个任务。比如你的CPU是多核心的话,就可以让一个CPU执行一个线程。如果只有一个CPU的话,底层是按照分时复用的原则,各个线程按照时间片来获得CPU资源。
使用多线程是为了提高程序运行的效率。假如有一个程序,要求用户输入多个算式,计算出结果,并分别打印到屏幕上。如果用户一直没有输入,那么无法计算,更无法打印。如果用户输入了,必须要全部输入完,才能计算出结果,再打印到屏幕。
使用线程的话,一个线程用来等待用户输入,一个用来计算结果,一个用来打印。用户在输入算式3的时候,计算线程在计算算式2,打印线程在打印算式1,三个线程同时进行,减少了等待,这样就提高了运行效率
java多线程为什么顺序执行?
thread类是被继承的,执行的时候调用的是继承它的子类,但java一般实现多线程不是继承thread类,而是实现runnable接口,因为java不能多重继承,所以继承thread类后就不能继承别的类了。
只要实现runnable接口(或继承了thread类)就可以实现多线程。
比如说有a b c d e五个类都实现runnable接口(或继承了thread类)你先进了main方法,就创建了一个线程,这个线程是main方法的你调用a的run()方法,就又创建一个线程,这个线程是a方法的。如果还不懂得话建议你去看看什么叫继承和接口,基础差的话理解起来有点困难我可是辛辛苦苦打字半天了~~~
java问题:什么是线程组?
在Java中每一个线程都归属于某个线程组管理的一员,例如在主函数main()主工作流程中产生一个线程,则产生的线程属于main这个线程组管理的一员。简单地说,线程组就是由线程组成的管理线程的类,这个类是java.lang.ThreadGroup类。定义一个线程组,通过以下代码可以实现。
ThreadGroup group=new ThreadGroup("group")
;Thread thread=new Thread(group,"the first thread of group")
;ThreadGroup类中的某些方法,可以对线程组中的线程产生作用。
例如,setMaxPriority()方法可以设定线程组中的所有线程拥有最大的优先权。
所有线程都隶属于一个线程组。那可以是一个默认线程组,亦可是一个创建线程时明确指定的组。
在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。
每个应用都至少有一个线程从属于系统线程组。
若创建多个线程而不指定一个组,它们就会自动归属于系统线程组。
线程组也必须从属于其他线程组。必须在构建器里指定新线程组从属于哪个线程组。
若在创建一个线程组的时候没有指定它的归属,则同样会自动成为系统线程组的一名属下。
因此,一个应用程序中的所有线程组最终都会将系统线程组作为自己的“父” -----------------河南新华