多线程并发编程(一):传统多线程实现方式
来源:互联网 发布:政治难民 知乎 编辑:程序博客网 时间:2024/05/16 07:44
前言
多线程并发这块的东西很重要,同样也很难,虽然是在J2SE中学习的知识,但是也只会基本的启动,了解基本的生命周期而已,并发这一块的东西基本还是不会,但是大部分公司都要求会并发,一般工作两三年的程序员也不一定搞得很清楚,所以自己开始尝试稍稍深入一下多线程并发编程,从多线程基本一步步到并发,不扯淡了,开始。
常见线程启动的几种方式
1、继承Thread类
2、实现Runnable接口
– 其他变种类似,比如匿名内部类的形式。。
package test01;public class ThreadTest { public static void main(String[] args) { // 当然类直接继承Thread和实现Runnable接口的那种就不演示了 // 第一种,继承Thread Thread t1 = new Thread(){ @Override public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1:"+Thread.currentThread().getName()); // 这里可以使用this,因为这个是Thread的匿名内部类,this表示Thread这个对象, // 但是一般不这样使用,一般还是使用上面的方式 System.out.println("2:"+this.getName()); } } }; t1.start(); // 第一种,实现Runnable Thread t2 = new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("3:"+Thread.currentThread().getName()); // 这里不能使用this.getName() 因为this表示的是Runnable这个对象 } } }); t2.start(); // 思考:这种方式考虑下,会调用哪个Run方法,提示:面向对象,方法覆盖 new Thread(new Runnable() { @Override public void run() { System.out.println("4:"+Thread.currentThread().getName()); } }){ @Override public void run() { System.out.println("5:"+Thread.currentThread().getName()); } }.start(); }}
另外这里给出Thread类的run方法
private Runnable target; @Override public void run() { if (target != null) { target.run(); } }
上面的思考应该是调用的“5”那个run方法,因为继承Thread类,自己写的run方法会覆盖掉父类的run方法
分析以上两种实现方法:
第一种,继承Thread: 其实就是覆盖掉了父类Thread的run方法,调用的时候调用的肯定是子类(继承Thread类)的run方法啦第二种,实现Runnable:
Runnable对象实现的run方法,其实是将Runnable对象通过Thread的构造函数传入到Thread类中,如果Runnable对象不为null的话,就调用Runnable对象中的run方法。
多线程机制会提高程序的运行效率吗?
不一定,多线程又不能提高CPU的主频,也就是单位时间能够执行的指令数目,如果是一个单线程的任务,CPU也只能处理单线程的话,做成多线程去处理的话,可能会降低运行的效率,比如一个人,三张桌子,分别在一个桌子做一个馒头,然后去另外一张桌子继续做,还是只在一张桌子上面做要快了?明显当然是在一张桌子上面做要快,因为不停的跑到其他桌子需要时间,也就是CPU切换线程需要时间。
0 0
- 多线程并发编程(一):传统多线程实现方式
- iOS 多线程编程<一、多线程实现方式>
- Java多线程(一)Java多线程传统实现方法
- java并发编程(1)--传统多线程技术
- Java 并发编程深入学习(一)——实现多线程的方式
- 并发编程(一):多线程基础知识
- JAVA并发编程1_多线程的实现方式
- 多线程一:两种方式实现多线程
- java并发编程(一)--Runnable和Thread实现多线程的区别
- 【java多线程与并发库】---传统java多线程<2> 线程创建方式
- java多线程和并发编程(一)--- java 线程小结
- Java多线程与并发编程总结(一)
- 并发编程(一)-创建多线程程序
- [学习随笔]并发编程与多线程一
- 多线程并发问题(一)
- 多线程并发知识点(一)
- 多线程并发库(一)
- 并发与多线程(一)
- ORACLE FOR UPDATE与FOR UPDATE OF区别
- Ubuntu下安装mysql5.6
- 检测用户拖动ScrollView速度
- ZOJ 3328(思维)
- Unity 3D——打包复用资源(.unitypackage文件)
- 多线程并发编程(一):传统多线程实现方式
- C#中方法参数的类型
- Tomcat、MySQL注意
- 在 Windows 安裝 PHP PEAR
- hdu-4549 M斐波那契数列【矩阵快速幂】
- 什么是数字签名?
- 五月份--到处溜达
- 数组-冒泡排序
- 地图的集成