在看这本书之前,我们要先明白一个问题。线程和进程之间的关系?
区别:线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。
- 查看jdk源码
发现这里Thread实现了Runnable接口,他们之间具有多态关系, - 好吧,本来是不打算写这么简单的东西了的,但是为了有小伙伴能参考一下也敲敲吧
- 查看jdk源码
public class Test {
public static void main(String[] args) {
try {
MyThread myThread = new MyThread();
myThread.setName("myThread");
myThread.start();
for (int i = 0; i < 10; i++) {
int time = (int) (Math.random() * 1000);
Thread.sleep(time);
System.out.println("main" + Thread.currentThread().getName());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class MyThread extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
int time = (int) (Math.random() * 1000);
Thread.sleep(time);
System.out.println("run" + Thread.currentThread().getName());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
要注意的是start()方式并不是代表线程启动的顺序
Thread.java类中的start()方法通知线程已经准备就绪,等待调用线程对象的run()方法
3. 查看代码段被哪个线程调用?
public class Run1 {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
}
- 比较run和start
public class MyThreaad extends Thread {
public MyThreaad(){
System.out.println("构造方法打印"+Thread.currentThread().getName());
}
@Override
public void run(){
System.out.println("run()方法打印的是"+Thread.currentThread().getName());
}
}
public class Run2 {
public static void main(String[] args) {
MyThreaad myThreaad = new MyThreaad();
// myThreaad.start(); start()方法是被Thread-0的线程调用了,run()方法是自动调用的
myThreaad.run();
}
}
我太菜了,最后更新 2017年10月17日23:44:02 。。。。。 p33