- 浏览: 521732 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (114)
- C基础 (1)
- C指针 (0)
- C语言库函数相关 (1)
- Linux (2)
- Linux网络编程 (1)
- PostgreSQL (0)
- Redis (2)
- Java Web (2)
- JAVA基础 (35)
- Ubuntu (8)
- Android (2)
- MySQL (3)
- 日志 (1)
- 书虫 (1)
- 数据结构 (0)
- 算法 (0)
- 开发工具 (1)
- 转载 (13)
- 英语 (18)
- tomcat启动脚本分析 (3)
- Oracle基础 (4)
- tomcat源码分析 (3)
- tomcat (1)
- Java相关 (1)
- Oracle基本原理--Oracle体系结构 (0)
- Oracle基本原理--表 (0)
- Oracle基本原理--索引 (0)
- Oracle基本原理--事务 (0)
- Oracle开发--SQL (1)
- Oracle基本原理--PL/SQL (0)
- Oracle基本原理--常用函数 (0)
- Oralce管理--用户及权限管理 (0)
- Oracle管理--安装调试 (0)
- Oracle管理--备份恢复 (0)
- Oralce管理--数据迁移 (0)
- Oracle管理--闪回 (0)
- Oracle管理--故障处理 (0)
- Oracle优化原理--统计信息 (0)
- Oracle优化原理--执行计划 (0)
- Oracle优化原理--诊断工具 (0)
- Oracle优化原理--深入理解表 (0)
- Oracle优化原理--深入理解索引 (0)
- Oracle优化原理--表连接原理 (0)
- Java--OOP (0)
- Java--异常 (0)
- Java--泛型 (0)
- Java--集合 (0)
- Java--IO (0)
- Java--枚举类型 (0)
- Java--注释 (0)
- Java--多线程 (0)
- Java--XML (0)
- Java--JDBC (3)
- Servlet (0)
- JSP (0)
- JSTL (0)
- 设计模式 (0)
- DAO与MVC (0)
- Javascript (2)
- Ajax (0)
- JQuery (0)
- HTML/CSS (0)
- 前端相关 (1)
- HTTP (0)
- TCP/IP (0)
- GO基础 (0)
最新评论
-
jsonmong:
推荐一个开发平台,采用的是插件化的设计思想,效果很不错的。ht ...
构建Java Web开发环境 -
wxm198427:
首先表示辛苦了!我想问个问题:我的是windows 7 x64 ...
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤 -
握着橄榄枝的人:
我之前按照你的update mysql.user set pa ...
Windows7下MySQL5.5.20免安装版的配置 -
confident_f:
安装了32的客户端后,用plsql导入导出表有问题,生成不了d ...
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤 -
confident_f:
安装数据库的时候第9步卡住了 是怎么回事呢?
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤
1、start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。
通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后JVM通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程执行体,它包含了要执行的这个线程的内容,run方法运行结束,此线程终止,而CPU再运行其它线程,
2、run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程,只有这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
记住:线程就是为了更好地利用CPU,提高程序运行速率的!
为了更好地理解两者的区别,看以下的例子:
例程1:
程序的运行结果1(//th1.run();//th2.run();):
main
Thread-0 0
Thread-0 1
Thread-1 0
Thread-0 2
Thread-1 1
Thread-1 2
Thread-0 3
Thread-1 3
Thread-0 4
Thread-1 4
Thread-0 5
Thread-0 6
Thread-1 5
Thread-0 7
Thread-1 6
Thread-0 8
Thread-1 7
Thread-0 9
Thread-1 8
Thread-0 10
Thread-0 11
Thread-0 12
Thread-1 9
Thread-0 13
Thread-0 14
Thread-1 10
Thread-0 15
Thread-0 16
Thread-1 11
Thread-0 17
Thread-1 12
Thread-0 18
Thread-1 13
Thread-0 19
Thread-1 14
Thread-1 15
Thread-1 16
Thread-1 17
Thread-1 18
Thread-1 19
程序的运行结果2:(//th1.start();//th2.start();)
main
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
运行结果分析:线程对象调用start()方法,就表示启动了线程,即又产生了一条执行线索。而调用run()方法,只是相当于普通的方法调用,并没有产生新的执行线索,run()方法仍然在调用它的线程中执行。
如下图1为两种不同情况的比较:
假设将程序中的注释都去掉:
例程2:
程序的运行结果如下:
第一种结果:
main
Thread-0 0
Thread-1 0
Thread-1 1
Thread-1 2
main 0
Thread-1 3
Thread-0 1
Thread-1 4
main 1
main 2
main 3
main 4
main 5
Thread-1 5
Thread-0 2
Thread-0 3
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-1 6
Thread-1 7
main 6
Thread-1 8
Thread-0 8
Thread-0 9
Thread-1 9
main 7
Thread-1 10
Thread-0 10
Thread-1 11
main 8
main 9
Thread-1 12
Thread-0 11
Thread-1 13
Thread-1 14
Thread-1 15
main 10
Thread-1 16
Thread-1 17
Thread-0 12
Thread-1 18
main 11
Thread-1 19
Thread-0 13
Thread-0 14
main 12
main 13
main 14
Thread-0 15
main 15
Thread-0 16
main 16
main 17
Thread-0 17
main 18
Thread-0 18
main 19
Thread-0 19
第二种结果:
main
main 0
Thread-0 0
Thread-1 0
Thread-0 1
main 1
main 2
Thread-0 2
Thread-1 1
Thread-0 3
main 3
main 4
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-1 2
Thread-0 8
main 5
Thread-0 9
Thread-1 3
Thread-0 10
main 6
Thread-0 11
Thread-1 4
Thread-0 12
main 7
Thread-0 13
Thread-1 5
Thread-0 14
main 8
Thread-0 15
Thread-1 6
Thread-0 16
main 9
Thread-0 17
Thread-1 7
Thread-0 18
main 10
Thread-0 19
Thread-1 8
main 11
Thread-1 9
main 12
Thread-1 10
Thread-1 11
main 13
Thread-1 12
Thread-1 13
Thread-1 14
main 14
Thread-1 15
main 15
Thread-1 16
main 16
main 17
Thread-1 17
main 18
Thread-1 18
main 19
Thread-1 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
问题:为什么会产生这两种结果?
例程3:
程序的运行结果如下:
第一种结果:
main 0
main 1
Thread-0 0
Thread-1 0
Thread-1 1
Thread-0 1
Thread-0 2
main 2
Thread-0 3
Thread-1 2
Thread-0 4
Thread-0 5
main 3
Thread-0 6
Thread-1 3
Thread-0 7
main 4
main 5
Thread-0 8
Thread-0 9
Thread-1 4
Thread-1 5
Thread-1 6
Thread-0 10
main 6
Thread-0 11
Thread-1 7
Thread-0 12
Thread-0 13
Thread-0 14
main 7
main 8
main 9
main 10
Thread-0 15
Thread-0 16
Thread-1 8
Thread-0 17
main 11
Thread-0 18
Thread-1 9
Thread-1 10
Thread-1 11
Thread-0 19
main 12
main 13
main 14
Thread-1 12
main 15
Thread-1 13
main 16
Thread-1 14
main 17
Thread-1 15
main 18
main 19
Thread-1 16
main 0
Thread-1 17
main 1
Thread-1 18
Thread-1 19
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
第二种结果:
Thread-0 0
Thread-1 0
Thread-1 1
Thread-1 2
main 0
Thread-1 3
Thread-0 1
Thread-0 2
Thread-1 4
main 1
Thread-1 5
Thread-1 6
Thread-1 7
Thread-0 3
Thread-1 8
Thread-1 9
main 2
Thread-1 10
Thread-0 4
Thread-1 11
Thread-1 12
main 3
main 4
Thread-1 13
Thread-0 5
Thread-1 14
main 5
Thread-1 15
Thread-0 6
Thread-0 7
Thread-0 8
Thread-0 9
Thread-1 16
main 6
Thread-1 17
Thread-0 10
Thread-0 11
Thread-1 18
Thread-1 19
main 7
main 8
main 9
Thread-0 12
Thread-0 13
main 10
Thread-0 14
Thread-0 15
Thread-0 16
main 11
Thread-0 17
main 12
Thread-0 18
main 13
Thread-0 19
main 14
main 15
main 16
main 17
main 18
main 19
第三种结果:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
Thread-1 0
Thread-0 0
Thread-1 1
main 0
main 1
Thread-0 1
main 2
Thread-1 2
Thread-1 3
Thread-1 4
main 3
main 4
Thread-0 2
main 5
Thread-1 5
main 6
Thread-0 3
main 7
Thread-1 6
main 8
Thread-0 4
Thread-0 5
main 9
main 10
main 11
Thread-1 7
main 12
main 13
main 14
Thread-0 6
main 15
Thread-1 8
main 16
Thread-0 7
main 17
Thread-1 9
main 18
main 19
Thread-0 8
Thread-0 9
main 0
Thread-1 10
main 1
main 2
Thread-0 10
Thread-0 11
Thread-0 12
main 3
Thread-1 11
Thread-1 12
Thread-1 13
main 4
Thread-0 13
main 5
Thread-1 14
main 6
Thread-0 14
main 7
Thread-1 15
main 8
main 9
main 10
Thread-0 15
Thread-0 16
main 11
Thread-1 16
main 12
Thread-0 17
main 13
Thread-1 17
main 14
Thread-0 18
main 15
Thread-1 18
Thread-1 19
main 16
Thread-0 19
main 17
main 18
main 19
问题:为什么会产生这三种结果?
例程4:
程序运行结果如下:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
说明:在这种情况下才会产生惟一结果。线程对象直接调用run()方法,在主线程中顺序执行。
通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后JVM通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程执行体,它包含了要执行的这个线程的内容,run方法运行结束,此线程终止,而CPU再运行其它线程,
2、run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
如果直接用run方法,这只是调用一个方法而已,程序中依然只有主线程,只有这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。
记住:线程就是为了更好地利用CPU,提高程序运行速率的!
为了更好地理解两者的区别,看以下的例子:
例程1:
public class TestThread { public static void main(String arg[]){ NewThread t1 = new NewThread(); NewThread t2 = new NewThread(); Thread th1 = new Thread(t1); Thread th2 = new Thread(t2); System.out.println(Thread.currentThread().getName() ); th1.start(); th2.start(); //th1.run(); //th2.run(); } } class NewThread implements Runnable{ int i = 0; public void run() { for(int i = 0; i <20;i ++){ System.out.println(Thread.currentThread().getName() +" "+ i); } } }
程序的运行结果1(//th1.run();//th2.run();):
main
Thread-0 0
Thread-0 1
Thread-1 0
Thread-0 2
Thread-1 1
Thread-1 2
Thread-0 3
Thread-1 3
Thread-0 4
Thread-1 4
Thread-0 5
Thread-0 6
Thread-1 5
Thread-0 7
Thread-1 6
Thread-0 8
Thread-1 7
Thread-0 9
Thread-1 8
Thread-0 10
Thread-0 11
Thread-0 12
Thread-1 9
Thread-0 13
Thread-0 14
Thread-1 10
Thread-0 15
Thread-0 16
Thread-1 11
Thread-0 17
Thread-1 12
Thread-0 18
Thread-1 13
Thread-0 19
Thread-1 14
Thread-1 15
Thread-1 16
Thread-1 17
Thread-1 18
Thread-1 19
程序的运行结果2:(//th1.start();//th2.start();)
main
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
运行结果分析:线程对象调用start()方法,就表示启动了线程,即又产生了一条执行线索。而调用run()方法,只是相当于普通的方法调用,并没有产生新的执行线索,run()方法仍然在调用它的线程中执行。
如下图1为两种不同情况的比较:

假设将程序中的注释都去掉:
例程2:
public class TestThread { public static void main(String arg[]){ NewThread t1 = new NewThread(); NewThread t2 = new NewThread(); Thread th1 = new Thread(t1); Thread th2 = new Thread(t2); System.out.println(Thread.currentThread().getName()); th1.start(); th2.start(); th1.run(); th2.run(); } } class NewThread implements Runnable{ int i = 0; public void run() { for(int i = 0; i <20;i ++){ System.out.println(Thread.currentThread().getName() +" "+ i); } } }
程序的运行结果如下:
第一种结果:
main
Thread-0 0
Thread-1 0
Thread-1 1
Thread-1 2
main 0
Thread-1 3
Thread-0 1
Thread-1 4
main 1
main 2
main 3
main 4
main 5
Thread-1 5
Thread-0 2
Thread-0 3
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-1 6
Thread-1 7
main 6
Thread-1 8
Thread-0 8
Thread-0 9
Thread-1 9
main 7
Thread-1 10
Thread-0 10
Thread-1 11
main 8
main 9
Thread-1 12
Thread-0 11
Thread-1 13
Thread-1 14
Thread-1 15
main 10
Thread-1 16
Thread-1 17
Thread-0 12
Thread-1 18
main 11
Thread-1 19
Thread-0 13
Thread-0 14
main 12
main 13
main 14
Thread-0 15
main 15
Thread-0 16
main 16
main 17
Thread-0 17
main 18
Thread-0 18
main 19
Thread-0 19
第二种结果:
main
main 0
Thread-0 0
Thread-1 0
Thread-0 1
main 1
main 2
Thread-0 2
Thread-1 1
Thread-0 3
main 3
main 4
Thread-0 4
Thread-0 5
Thread-0 6
Thread-0 7
Thread-1 2
Thread-0 8
main 5
Thread-0 9
Thread-1 3
Thread-0 10
main 6
Thread-0 11
Thread-1 4
Thread-0 12
main 7
Thread-0 13
Thread-1 5
Thread-0 14
main 8
Thread-0 15
Thread-1 6
Thread-0 16
main 9
Thread-0 17
Thread-1 7
Thread-0 18
main 10
Thread-0 19
Thread-1 8
main 11
Thread-1 9
main 12
Thread-1 10
Thread-1 11
main 13
Thread-1 12
Thread-1 13
Thread-1 14
main 14
Thread-1 15
main 15
Thread-1 16
main 16
main 17
Thread-1 17
main 18
Thread-1 18
main 19
Thread-1 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
问题:为什么会产生这两种结果?
例程3:
public class TestThread { public static void main(String arg[]){ NewThread t1 = new NewThread(); NewThread t2 = new NewThread(); Thread th1 = new Thread(t1); Thread th2 = new Thread(t2); th1.start(); th2.start(); for(int i = 0; i <20;i ++){ System.out.println(Thread.currentThread().getName() +" "+ i); } th1.run(); th2.run(); } } class NewThread implements Runnable{ int i = 0; public void run() { for(int i = 0; i <20;i ++){ System.out.println(Thread.currentThread().getName() +" "+ i); } } }
程序的运行结果如下:
第一种结果:
main 0
main 1
Thread-0 0
Thread-1 0
Thread-1 1
Thread-0 1
Thread-0 2
main 2
Thread-0 3
Thread-1 2
Thread-0 4
Thread-0 5
main 3
Thread-0 6
Thread-1 3
Thread-0 7
main 4
main 5
Thread-0 8
Thread-0 9
Thread-1 4
Thread-1 5
Thread-1 6
Thread-0 10
main 6
Thread-0 11
Thread-1 7
Thread-0 12
Thread-0 13
Thread-0 14
main 7
main 8
main 9
main 10
Thread-0 15
Thread-0 16
Thread-1 8
Thread-0 17
main 11
Thread-0 18
Thread-1 9
Thread-1 10
Thread-1 11
Thread-0 19
main 12
main 13
main 14
Thread-1 12
main 15
Thread-1 13
main 16
Thread-1 14
main 17
Thread-1 15
main 18
main 19
Thread-1 16
main 0
Thread-1 17
main 1
Thread-1 18
Thread-1 19
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
第二种结果:
Thread-0 0
Thread-1 0
Thread-1 1
Thread-1 2
main 0
Thread-1 3
Thread-0 1
Thread-0 2
Thread-1 4
main 1
Thread-1 5
Thread-1 6
Thread-1 7
Thread-0 3
Thread-1 8
Thread-1 9
main 2
Thread-1 10
Thread-0 4
Thread-1 11
Thread-1 12
main 3
main 4
Thread-1 13
Thread-0 5
Thread-1 14
main 5
Thread-1 15
Thread-0 6
Thread-0 7
Thread-0 8
Thread-0 9
Thread-1 16
main 6
Thread-1 17
Thread-0 10
Thread-0 11
Thread-1 18
Thread-1 19
main 7
main 8
main 9
Thread-0 12
Thread-0 13
main 10
Thread-0 14
Thread-0 15
Thread-0 16
main 11
Thread-0 17
main 12
Thread-0 18
main 13
Thread-0 19
main 14
main 15
main 16
main 17
main 18
main 19
第三种结果:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
Thread-1 0
Thread-0 0
Thread-1 1
main 0
main 1
Thread-0 1
main 2
Thread-1 2
Thread-1 3
Thread-1 4
main 3
main 4
Thread-0 2
main 5
Thread-1 5
main 6
Thread-0 3
main 7
Thread-1 6
main 8
Thread-0 4
Thread-0 5
main 9
main 10
main 11
Thread-1 7
main 12
main 13
main 14
Thread-0 6
main 15
Thread-1 8
main 16
Thread-0 7
main 17
Thread-1 9
main 18
main 19
Thread-0 8
Thread-0 9
main 0
Thread-1 10
main 1
main 2
Thread-0 10
Thread-0 11
Thread-0 12
main 3
Thread-1 11
Thread-1 12
Thread-1 13
main 4
Thread-0 13
main 5
Thread-1 14
main 6
Thread-0 14
main 7
Thread-1 15
main 8
main 9
main 10
Thread-0 15
Thread-0 16
main 11
Thread-1 16
main 12
Thread-0 17
main 13
Thread-1 17
main 14
Thread-0 18
main 15
Thread-1 18
Thread-1 19
main 16
Thread-0 19
main 17
main 18
main 19
问题:为什么会产生这三种结果?
例程4:
public class TestThread { public static void main(String arg[]){ NewThread t1 = new NewThread(); NewThread t2 = new NewThread(); Thread th1 = new Thread(t1); Thread th2 = new Thread(t2); for(int i = 0; i <20;i ++){ System.out.println(Thread.currentThread().getName() +" "+ i); } th1.run(); th2.run(); } } class NewThread implements Runnable{ int i = 0; public void run() { for(int i = 0; i <20;i ++){ System.out.println(Thread.currentThread().getName() +" "+ i); } } }
程序运行结果如下:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 10
main 11
main 12
main 13
main 14
main 15
main 16
main 17
main 18
main 19
说明:在这种情况下才会产生惟一结果。线程对象直接调用run()方法,在主线程中顺序执行。
发表评论
-
foreach循环
2013-06-24 16:15 1495从JDK1.5开始,Java提供了一个更简单的循环:forea ... -
可变参数
2013-06-24 15:38 1224从JDK1.5开始,Java允许使用可变参数为方法指定数量不确 ... -
泛型(core java 笔记)
2013-06-18 16:18 20741.为什么引入泛型 package generic; ... -
两个程序的说明
2010-10-19 09:26 11661、程序1的结果是: clas ... -
构造器初始化
2010-10-18 14:42 1535可以用构造器来进行初始化。在运行时刻,可以调用方法或执行某些动 ... -
成员初始化
2010-10-18 07:55 1247Java尽力保证:所有变量在使用前都能得到恰当的初始化。 对 ... -
线程的死锁
2010-10-11 19:21 1523当两个线程相互等待对方释放同步监视器时就会发生死锁,Java虚 ... -
线程的同步
2010-10-11 19:00 1290一个经典的关于线程安全性的问题:银行取钱问题。 银行取钱的基 ... -
java网站收集
2010-10-10 18:13 1294JAVA开发者最常去的25个英文网站:http://www.i ... -
控制线程
2010-10-10 16:06 20261、线程睡眠:sleep 如果我们需要让当前正在执行的线程暂 ... -
线程的状态
2010-09-28 19:00 1076线程从创建到执行完毕的整个过程称为线程的生命周期,在整个生命周 ... -
Java中创建线程的两种方法
2010-09-26 10:18 5646在Java中创建线程有两种方法:继承Thread类和实现Run ... -
创建String对象过程的内存分配小结
2010-09-23 20:32 2794常量池(Constant Pool):指的是在编译期被确定,并 ... -
Java堆和栈的区别 经典总结(转载)
2010-09-18 16:48 1289栈与堆都是Java用来在Ram中存放数据的地方。 与C++不 ... -
Java初学者都必须理解的七大问题
2010-09-18 10:36 1131问题一:我声明了什么 ... -
关于计算java程序运行时间(转载)
2010-09-18 09:22 1136//第一种,伪代码 long startTime= ... -
for循环的优化
2010-09-17 20:29 2158在程序中经常用到for循环,当一些算法实时性要求非常高时,对f ... -
详细解析Java中抽象类和接口的区别(转载)
2010-09-17 10:16 1126在Java语言中,abstract class和inter ... -
集合类(四):Map集合
2010-09-16 20:26 21555、Map集合 Map集合为映射类型,映射与集和列表有明显的区 ... -
集合类(三):Set集合
2010-09-16 19:43 29264、Set集合 Set集合为集类型,集是最简单的一种集合,存放 ...
相关推荐
在Java多线程编程中,`Thread` 类的 `run()` 方法和 `start()` 方法扮演着不同的角色,它们之间的区别是理解并发执行的关键。 首先,`start()` 方法是真正启动新线程的方法。当你调用 `Thread` 对象的 `start()` ...
`Thread`类是Java中用于创建和管理线程的核心类,而`start()`和`run()`方法是与线程执行密切相关的方法,它们之间存在显著的区别。 首先,`run()`方法是`Runnable`接口或`Thread`类中的一个成员方法。当你需要创建...
在Java编程语言中,理解和掌握线程的使用是至关重要的,特别是`Thread.start()`和`Thread.run()`这两个方法。它们在多线程编程中扮演着关键角色,但有着明显的区别。 首先,`Thread.start()`方法的主要作用是启动一...
在Java多线程编程中,理解`Thread`类的`start()`和`run()`方法的区别至关重要。这两个方法在实现线程并发执行时起到不同的作用。 首先,`start()`方法是用于启动一个新的线程。当你调用`start()`方法时,Java虚拟机...
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。...run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
本文主要介绍了JAVA面试题中关于启动线程的start()和run()方法的详解。通过示例代码,详细介绍了这两个方法的作用和区别,以及它们在启动线程时的执行过程。 第一点,start()方法和run()方法的区别。在Java中,...
首先,`Thread`类是Java中的核心类,它代表了程序中的一个执行线程。当你创建一个新的`Thread`对象并启动它时,Java虚拟机(JVM)会为这个线程分配CPU时间片,从而使得代码可以在不同的线程间交替执行。 要实现...
Java线程中start和run的区别详解 在Java编程中,线程是一个基础概念,start和run是两个常用的方法,但是它们之间的区别却经常被忽视。本文将详细介绍Java线程中start和run的区别,通过示例代码帮助大家更好地理解这...
本文将深入探讨`start()` 和 `run()` 方法的区别及其在多线程环境中的作用。 1. **start() 方法** `start()` 方法是启动线程的关键。当你调用 `Thread` 对象的 `start()` 方法时,Java虚拟机(JVM)会执行以下几...
在理解Thread类的start()和run()方法的区别时,我们需要深入探讨它们的工作原理。 首先,start()方法的主要作用是启动一个新的线程并执行该线程的run()方法。当调用start()时,Java虚拟机(JVM)会执行线程的初始化...
Java线程中的`run()`和`start()`方法是线程编程中的关键概念,它们之间有着显著的区别。首先,我们来看一下这两个方法的基本解释。 1. `start()`方法:`start()`是真正启动线程的关键,它使得线程进入就绪(可运行...
在Java编程语言中,多线程的实现有多种方式,其中最常见的是通过继承`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景,理解它们之间的区别对于编写高效、可维护的多线程应用至关重要。 ### 继承...
* 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread.currentThread().getId()...
Java中启动线程start和run的两种方法 Java 中启动线程有两种方法,即继承 Thread 类和实现 Runnable 接口。由于 Java 无法实现多重继承,所以一般通过实现 Runnable 接口来创建线程。但是,无论哪种方法都可以通过 ...
本文将全面解析Java线程中的`start`和`run`方法,以及自定义线程的两种常见方式。 首先,自定义线程有两种主要方法: 1. 实现`Runnable`接口:创建一个类实现`Runnable`接口,并重写`run`方法。然后,将这个实现了...
1. **`start`方法**:当我们调用`Thread`对象的`start`方法时,Java虚拟机(JVM)会创建一个新的线程来执行`run`方法中的代码。这意味着`run`方法的内容将在一个新的独立的执行上下文中运行,与调用`start`方法的...
继承Thread类的方法直接扩展Thread类并重写run()方法,而实现Runnable接口则需要创建一个实现了Runnable接口的类,并在run()方法中定义线程的行为。这两种方式各有优缺点,继承Thread类允许直接使用this关键字引用...
在Java中,直接继承`Thread`类并重写`run()`方法是创建线程的一种方式。下面是一个简单的示例: ```java public class FactorialThread extends Thread { private int number; public FactorialThread(int num) ...
Java中的线程主要通过`java.lang.Thread`类来创建和管理。 #### 二、线程创建方式 在Java中,可以通过以下两种方式创建线程: 1. **继承Thread类:** 创建一个新的类,使其继承自`Thread`类,并重写`run()`方法。...
Java的线程是通过`java.lang.Thread`类来创建和管理的。当虚拟机启动时,会有一个主线程,即main方法所在的线程。创建新的线程通常涉及以下步骤: 1. **创建Thread实例**:首先,你需要创建一个Thread类的实例,这...