Java学习(5):多线程和高并发

 “高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程

  多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现

一,高并发与多线程

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)程序的复杂度会上升。






猜你喜欢

转载自blog.csdn.net/zxf_0601/article/details/79806875
今日推荐