java多线程编程核心技术读后感

本书主要是如下六章内容:

第一章: Java多线程技能

第二章:对象及变量的并发访问

第三章:线程间通信

第四章:Lock的使用

第五章:定时器Timer

第六章:单例模式与多线程


1、多线程是异步的

2、实现多线程方式:继承Thread类;实现Runnable接口

3、线程间的数据共享问题:

线程间的数据不共享实例:

public class MyThread extends Thread{

    private int count=5;

    public MyThread(String name){

        super();

        this.setName(name);

    }

    @Override

    public void run(){

        super.run();

        while(count>0){

            count--;

            System.out.println(count+":"+Thread.currentThread().getName());

        }

    }

}

public class Run {

    public static void main(String[] args) {

        MyThread myThread1=new MyThread("a");

        MyThread myThread2=new MyThread("b");

        MyThread myThread3=new MyThread("c");

        myThread1.start();

        myThread2.start();

        myThread3.start();

    }

}

线程间数据共享实例:

public class MyThread extends Thread{

    private int count=5;

    @Override

    public void run(){

        super.run();

        while(count>0){

            count--;

            System.out.println(count+":"+Thread.currentThread().getName());

        }

    }

}

public class Run {

    public static void main(String[] args) {

        MyThread myThread1=new MyThread();

        Thread thread1=new Thread(myThread1,"a");

        Thread thread2=new Thread(myThread1,"b");

        Thread thread3=new Thread(myThread1,"c");

        thread1.start();

        thread2.start();

        thread3.start();

    }

}

上述线程间的数据共享实例会产生非线程安全问题,可以在方法或对象上加synchronized关键字解决

将MyThread类改为:

public class MyThread extends Thread{

    private int count=5;

    @Override

    synchronized public void run(){

        super.run();

        while(count>0){

            count--;

            System.out.println(count+":"+Thread.currentThread().getName());

        }

    }

}

4、非线程安全会造成数据脏读,即读到的数据是修改过的。脏读一定会出现操作实例变量的情况,这就是不同线程争抢实例变量的结果。

5、方法中的变量不存在非线性安全问题

6、线程间的通信:

            ①用waite、notify实现线程间的通信,比较典型的是消费者、生产者问题

            ②通过管道进行线程间的通信:字节流、字符流。在Java的JDK中提供了4个类来进行线程间的通信:PipeInputStream、PipeOutputStream、PipedReader、PipedWriter

7、join与synchronized的区别:join在内部使用wait()方法进行等待,而synchronized关键字使用的是“对象监视器”原理作为同步

8、线程变量具有隔离性

9、使用InheritanleThreadLocal类可以让子线程从父线程中取得值

10、Lock实现线程间的同步,使用Condition实现线程间的等待、通知。Condition可以实现多路通知功能。

这本书花了一个星期的时间大概看了一下,比较适合我这种初级水平,写的简单易懂,但是内容非常丰富。

你可能感兴趣的:(java多线程编程核心技术读后感)