多线程理解和我们为什么要使用线程
2018-04-07 15:26
381 查看
首先说下多线程出现的原因:
为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等
多线程的好处:
1.使用线程可以把占据时间长的程序中的任务放到后台去处理
2.用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度
3.程序的运行效率可能会提高
4.在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.
多线程的缺点:
1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.
2.更多的线程需要更多的内存空间
3.线程中止需要考虑对程序运行的影响.
4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生
实现多线程的方法:
java多线程实现方式主要有两种:继承Thread类、实现Runnable接口
1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:public class MaYi extends Thread { String name; public MaYi(String name){ this.name = name; } public void run(){ while(true){ try { Thread.sleep(1000);//等待1秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(name+"蚂蚁正在下载......"); } } }
启动线程:
public static void main1(String[] args) { MaYi m1 = new MaYi("1号"); m1.start(); MaYi m2 = new MaYi("2号"); m2.start();
2、实现Runnable接口方式实现多线程
如果自己的类已经继承另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:public class MyThread extends OtherClass implements Runnable { public void run() { System.out.println("MyThread.run()"); } }为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
MyThread myThread = new MyThread(); Thread thread = new Thread(myThread); thread.start();事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
public void run() { if (target != null) { target.run(); } }
相关文章推荐
- 多线程理解和我们为什么要使用线程
- 对于多线程的理解以及我们为什么要使用多线程
- 黑马程序员01--线程与进程的区别以及为什么使用多线程?
- 什么是线程?它与进程的区别?为什么要使用多线程?
- 什么是线程?它与进程有什么区别?为什么要使用多线程
- 线程与进程区别,为什么使用多线程
- 线程与进程的定义以及为什么要使用多线程?
- BOOST 库 thread类线程使用 多线程处理的理解
- 什么是线程?它与进程有什么区别?为什么要使用多线程?
- 怎么理解线程使用而不拥有资源?为什么进程切换的开销比线程切换大呢?
- 单例理解以及我们为什么要使用单例
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- 什么是线程?它与进程的区别?为什么要使用多线程?
- 我们为什么要使用PDO进行PHP程序开发?
- 我们为什么要使用开源测试工具?
- IE6很烂,为什么我们仍在使用?
- 我们为什么需要校友录 如何使用多条件搜索功能寻找校友
- 多线程中静态变量使用要注意!!!主线程与子线程关系。
- 多线程编程学习3——使用MFC工作者线程
- Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?