package com.tree.thread;
public class MyThread extends Thread {
private String name;
public MyThread (String name){
this.name =name;
}
public void run(){
for(int i = 0;i<100;i++){
System.out.println(name+":"+i);
}
super.run();
}
}MyThread.class
package com.tree.thread;
public class MyRunnable implements Runnable {
private String name;
public MyRunnable(String name){
this.name=name;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i =0;i<100;i++){
System.out.println(name +":"+i);
}
}
}MyRunable.class
public class ThreadDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// MyThread t1 = new MyThread("A");
// MyThread t2 = new MyThread("B");
// 线程的启动是通过start方法
// t1.run();
// t2.run();
// t3.run();
MyRunnable r1 = new MyRunnable("A");
MyRunnable r2 = new MyRunnable("B");
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
}ThreadDemo01.class
Thread中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法,也就是使线程得到运行,启动线程,具有异步执行的效果。如果调用线程的run()就不是异步执行,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中的代码执行完后才可以执行后面的代码。下图分别是使用start()和调用run()的结果。另外,还需要注意的是,执行start()方法的顺序并不代表线程启动的顺序。
图1.start()--异步执行
图2.run()--同步执行
本文详细介绍了在Java中创建线程的两种主要方法:继承Thread类与实现Runnable接口。通过具体的代码示例展示了如何使用这两种方式,并解释了它们之间的区别,特别是调用start()方法与直接调用run()方法的不同效果。
170万+

被折叠的 条评论
为什么被折叠?



