读书笔记——Java多线程编程核心技术

来源:互联网 发布:ssH访问境外服务器端口 编辑:程序博客网 时间:2024/05/16 14:18

Java多线程编程核心技术


在看这本书之前,我们要先明白一个问题。线程和进程之间的关系?

  • 区别:线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。

    1. 查看jdk源码
      这里写图片描述
      发现这里Thread实现了Runnable接口,他们之间具有多态关系,
    2. 好吧,本来是不打算写这么简单的东西了的,但是为了有小伙伴能参考一下也敲敲吧
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());    }}
  1. 比较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

阅读全文
0 0