[Java并发编程]-创建线程的两种方式及区别
来源:互联网 发布:同花顺 api 编程接口 编辑:程序博客网 时间:2024/04/29 10:14
转载请注明:http://blog.csdn.net/UniKylin/article/details/45016117
1.线程和进程的区别
并行:是多个任务在同一时间同时执行,例如多核计算机同时计算的任务可以理解为并行
并发:从微观上看是多个任务抢占一个CPU从而执行自己的任务,轮流执行任务,但是如果遇到资源冲突的时候并没有从根本提高执行效率。但是提高了CPU的使用效率。
前段时间在GitHub上的一幅图可以很好的阐述上面的概念非常形象
2.Java中创建线程的两种方式
1.第一种方式:直接继承Thread:
public class Dog extends Thread { // 私有变量 private int number; // 初始化乘法表上限数字 public Dog(int number) { this.number = number; } //重写逻辑方法 @Override public void run() { // 打印乘法表 for (int i = 1; i <= number; i++) { for (int j = 1; j <= i; j++) { System.out.print(j + " * " + i + " = " + i * j + "\t"); } System.out.println(); } } public static void main(String[] args) { Dog dog = new Dog(9); dog.start();//启动线程打印乘法表 }}
2.第二种方式:实现Runnable接口的方式
public class Cat implements Runnable { private int number; public Cat(int number) { this.number = number; } //重写逻辑方法 @Override public void run() { System.out.println("Current Thread :" + Thread.currentThread()); for (int i = 0; i <= number; i++) { for (int j = 0; j <= i; j++) { System.out.print(i + " * " + j + " = " + i * j + "\t"); } System.out.println(); } } public static void main(String[] args) { Thread task = new Thread(new Cat(9)); task.start(); }}
对比以上两种方式可以发现:第一种方式继承Thread不能再继承其他父类,所以对于程序的扩展性不是很友好,但是可以通过this访问当前线程的信息。第二种方式继承Runnable
接口,从设计角度来看比较灵活,Java是不支持多继承但是支持实现多个接口,这样就可以将这个缺点给克服了,如果要访问线程信息需要使用Thread.currentThread();
方法。
3.源码分析
public class Thread implements Runnable { //关联Runnable接口 private Runnable target; //线程逻辑方法 public void run() { if (target != null) { target.run(); } }}//线程接口public interface Runnable { //定义抽象的线程逻辑方法, public abstract void run();}
上面的Thread类和Runnable接口是Java JDK中两个最重要的核心部分,继承Thread属于对JDK本身的系统类的扩展,而实现Runnable接口的方式属于实现一种标准。不管哪种方式JVM启动线程的过程中都将他们进行装载,只不过方式不一样而已。具体哪种方法比较好,当然第二种方式从设计方面比较优雅和灵活。
2 2
- [Java并发编程]-创建线程的两种方式及区别
- Java并发编程:线程间协作的两种方式
- 线程创建的两种方式及区别
- Java创建线程的两种方式和主要区别
- Java线程的两种创建方式及优劣比较
- 【JAVA多线程】-线程的两种创建方式及比较
- 创建线程的两种方式区别
- 【java并发】传统线程技术中创建线程的两种方式
- java 创建线程 的两种方式
- Java线程创建的两种方式
- java创建线程的两种方式
- java创建线程的两种方式
- java线程的两种创建方式
- Java创建线程的两种方式
- java线程创建的两种方式
- Java创建线程的两种方式
- JAVA创建线程的两种方式
- Java线程创建的两种方式
- UVALive - 4324 Ugly Windows 水题+坑题
- 神经网络学习笔记(一)
- 对抗搜索(Adversarial Search)
- Ajax---(Asynchronous JavaScript + XML)
- 象观敏捷之旅-初探UserStory
- [Java并发编程]-创建线程的两种方式及区别
- Android重力感应开发
- 黑马程序员--数据类型和运算符
- java多线程之Semaphore信号量详解
- 黑马程序员_日记33_Java迭代器基本使用
- window下查看端口被哪个进程占用
- FZU - 2147 A-B Game(找规律)
- div中文本过长时显示部分文本及省略号
- [C++] 分享国外程序员的 C++开发资源大全