“高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程
多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现
一,高并发与多线程
1,高并发:高并发不是JAVA的专有的东西,是语言无关的广义的,为提供更好互联网服务而提出的概念。高并发想让服务器(tomcat)能接受处理多用户多请求。
2,多线程:多线程只是为了达到高并发目的(首先得有多线程接收处理多任务,才有高并发发生)。在某个细节点上,为实现某并发功能而采用的一种具体的实现方法,这种功能也可以由多进程实现,
当然,也可以由多进程,多线程一起实现。这是战术上的并行。
总之:高并发是一种现象,多线程是一种Java提高性能的手段
二,多线程的实现方式:
- 1.继承Thread类,重写run方法
- 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
- 3.通过Callable和FutureTask创建线程
4.通过线程池创建线程
1,通过继承Tread类实现线程的方式优缺点:
缺点:由于继承Tread类,继承的单一性,实现类无法在继承其他父类.使得该实现类灵活性降低.一般考虑灵活性的情况下,建议使用接口的方式实现,Runnable或Callable接口,而且该实现方式没有返回值.这也是一个缺陷.
优点:启动线程方便,直接调用start()方法即可.
2,通过runnable接口实现线程的方式优缺点:
缺点:该方式没有返回值,其次启动线程的run方法需要new Thread(),传入接口实现类,来调用start()方法启动.接口没有实现start()方法.
优点:通过接口方式实现使得实现类更加灵活,扩展性更好
3,通过Callable接口实现线程的优缺点:
缺点:实现接口的call()方法,通过new FutureTask()来启动,在借助new Thread(),较复杂
Callable<Integer> mycallabletask = new MyCallableTask();
FutureTask<Integer> futuretask= new FutureTask<Integer>(mycallabletask);
new Thread(futuretask).start();
优点:可获得返回值,使得功能更加全面.
4,通过线程池创建线程的方式优缺点:
多线程的概念很好理解就是多条线程同时存在,但要用好多线程确不容易,涉及到多线程间通信,多线程共用一个资源等诸多问题。
使用多线程的优缺点:
优点:
1)适当的提高程序的执行效率(多个线程同时执行)。
2)适当的提高了资源利用率(CPU、内存等)。
缺点:
1)占用一定的内存空间。
2)线程越多CPU的调度开销越大。
3)程序的复杂度会上升。