@log(java)
java 多线程的两种方法
1 什么是进程与线程
进程是指应用程序,在电脑中打开任务管理器可以看到windows正在运行多个进程,每个应用程序可以打开多个进程,例如可以打开多个ie浏览器
而线程指的是,进程中的一个执行流程 ,一个进程中可以同时运行多个不同的线程,分别执行不同的任务,例如qq,既可以在聊天的同时也可以接收文件。当多个线程同时运行时,我们称之为并发运行。
2 程序启动了多线程,有什么用呢?
可以实现多部分程序同时执行,专业术语也称之为并发。多线程的使用可以合理的使用cpu的资源,如果线程过多,会导致cpu处理不过来,降低性能。
cpu在处理程序时是通过快速切换完成的,好像随机一样。
3 创建多线程的两种方式
(1)继承Thread类
- 1定义一个类继承Thread
- 2重写run方法
- 3创建子类对象,就是创建线程对象。
- 4调用start方法,开启线程并让线程执行,同时告诉jvm调用run方法
(2) 实现Runnable接口
- 1.定义实现Runnable接口 避免单继承的局限性
- 2.覆盖接口中的run方法,将线程任务代码定义到run方法中
- 3 创建Thread类的对象 只有创建Thread类的对象才能创建线程
- 4 将Runnable接口的子类对象作为参数传递给Thread类的构造函数 因为线程任务被封装到Runnable接口的run方法中,而这个run方法属于Runnable接口的子类对象,所有将这个子类对象作为参数传递给Thread的构造函数,这样,线程对象创建时就可以明确要运行的线程
- 5调用Thread类的start()方法开启线程
(3)两种方法的比较
- 第二种实现Runnable接口避免 了单继承的局限性,所有较为常用
- 第二种方法更加符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。
- 继承Thread类,线程对象和线程任务耦合在一起,一旦创建Thread类的子类对象,既是线程对象,又有线程任务
- 而实现Runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型
- Runnable接口对线程对象实现了解耦