本文共 3101 字,大约阅读时间需要 10 分钟。
某一时间点执行的处理,是操作系统能够进行运算调度的最小单位。一条线程是某一进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
基于Java虚拟机(JVM,Java Virtual Machine,多学英语,也算是培养专业素养了),这点很重要,帮你们复习一下JVM的运行原理,自己之前看过研究过JVM的一些知识,自己亲手画的运行内存图。
下面是我上传的资料连接,有兴趣的朋友,欢迎下载。
太多JVM的知识,不太好讲,这里先不说了。下面直接上代码,比较两种方式的实现。。。
eclipse或是其他开发工具的使用我也不介绍了,我是用eclipse开发,其他工具,甚至记事本(扫地僧的级别玩家,膜拜都是可以实现的,确保本地配置好了好了java的运行环境即可。 抱歉,可能部分人会觉的代码比较乱,自己可以分包写,对于简单些的代码,我习惯这样写。public class Demo2 { public static void main(String[] args) { // main方法的入口方法 new Thread2_1("线程一").run(); // main线程,线程中调用了其他线程方法 new Thread2_1("线程一").start(); // Thread-1线程, ,并自动调用了run方法 new Thread2_2("线程二").run(); // main线程 new Thread(new Thread2_2("线程二")).start(); // Thread-2线程,并自动调用了run方法 }}class Thread2_1 extends Thread { private String name; public Thread2_1(String name) { name = this.name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "--extends 实现---Good"); } } public void a() { System.out.println(Thread.currentThread().getName() + "-----其他方法执行了"); }}class Thread2_2 implements Runnable { private String name; public Thread2_2(String name) { name = this.name; } @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "--implements 实现---Good"); } }}
程序入口,main方法,定义了线程的启动,比较结果输出
public class Demo2 { public static void main(String[] args) { // main方法的入口方法 new Thread2_1("线程一").run(); // main线程,线程中调用了其他线程方法 new Thread2_1("线程一").start(); // Thread-1线程, ,并自动调用了run方法 new Thread2_2("线程二").run(); // main线程 new Thread(new Thread2_2("线程二")).start(); // Thread-2线程,并自动调用了run方法 }}
定义Thread2_1线程,extends Thread 方式实现,有参构造,便于命名区分,两个方法用于测试
class Thread2_1 extends Thread { private String name; public Thread2_1(String name) { name = this.name; } public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "--extends 实现---Good"); } } public void a() { System.out.println(Thread.currentThread().getName() + "-----其他方法执行了"); }}
定义Thread2_2线程,implements runnable 方式,有参构造,便于命名区分
class Thread2_2 implements Runnable { private String name; public Thread2_2(String name) { name = this.name; } @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "--implements 实现---Good"); } }}
main--extends 实现---Goodmain--extends 实现---Goodmain--extends 实现---Goodmain--extends 实现---Goodmain--extends 实现---GoodThread-1--extends 实现---GoodThread-1--extends 实现---Goodmain--implements 实现---Goodmain--implements 实现---Goodmain--implements 实现---Goodmain--implements 实现---Goodmain--implements 实现---GoodThread-1--extends 实现---GoodThread-1--extends 实现---GoodThread-1--extends 实现---GoodThread-2--implements 实现---GoodThread-2--implements 实现---GoodThread-2--implements 实现---GoodThread-2--implements 实现---GoodThread-2--implements 实现---Good
是不是和你预期一样?
一、两种方式都是可行的,都是start()方法启动,会自动调用run()方法,但略有区别。
二、线程调用run()方法,不会启动新的线程,就像例子中,还是在main线程中运行的。 三、Thread类和Runnable方法本质上:Thread类底层是实现了Runnable接口,并且持有run方法,但Thread 类的run方法主体是空的,不执行任何操作,Thread类的run方法通常都由run方法重写(@override)。转载地址:http://qugrn.baihongyu.com/