多线程-理解

/**
 * 1.如何同时启动两个线程
 * 程序的启动就是两个线程的同时启动
 * 2.让同时启动的线程如何按照一定的顺序执行
 * 两个线程按照一定的顺序执行:说明的是满足某个条件的运行即:多线程协调之间的通信这样用到的通信的工具类就是有
 * countDownLatch,cycBarier,Condition,ReenTLock等等的操作
 * 我们经常说线程安全性,与其说是线程安全性不如说是数据安全性,这里所谓的数据安全性就是指的是数据的一致性,
 * 即:原子类,volatitle,synchronized,以及一些线程安全类的使用,用这些的目的主要有以下几点:
 *    1.明确一个概念:
 *        可以这样的理解:java进程就是一个主内存,也就是计算机本身的内存(虽然二者并不是一回事,但是可以这么理解)
 *        java多线程就是多核cpu,就是多个处理器(方便理解)这样每个线程本身就有自己的缓存区,但是这样的缓存区的数据
 *        是从哪来的呢?
 *        那么问题来了:
 *        这样的数据就是从主内存来的,也就是说,主内存对于多线程来说是线程共享的,也就是说主内存中的数据是共享的,那么这样
 *        的话怎么保存数据的一致性呢?也就是说如何保证数据实时的从线程本地的缓存,通过当前的线程的修改及时的write到
 *        主内存呢?
 *        主要方案如下:
 *          1.多线程工具类:countDownLatch,cycBarier,信号量
 *          2.原子类:
 *          3.synchrozized
 *          4.reenTrentLock
 *          5.volititle
 *
 *    3.线程可以分为:隐式线程和显式线程
 *        何为隐式线程?
 *         即:一个java程序的启动,本身自带main线程和垃圾线程,这些线程是不需要你去启动的你也感觉不到,但他本是
 *         就是存在的
 *        何为显式线程?
 *         即:实现线程的方式:
 *              1.常用的线程方式,这个就不多说了,直接去查资料或者(java多线程一书当中关于线程总结的很详细)
 *              2.线程池:这里主要明确一下几个参数的意义:
 *                  核心线程数:就是当前线程本身应该有的,骨干力量
 *                  最大线程数:这个我想和队列一起说为什么这样说呢?
 *               3.队列   因为队列中所能容纳的就是最大线程数,当超过最大线程数的时候,那么线程池的剩余一个参数就起作用
 *               4. 拒绝策略
 *     4.常见的应用:
 *       Future  ,FutureTask,CallAble结合线程池使用;
 *     5.通过源码发现:
 *        启动线程Start方法,这个方法是线程安全的?为什么,因为用Synchronized关键字修饰,并且他最终调用的是
 *        Start0()方法,而这个方法是用native关键字修饰的,底层就是关于c语言的说明,不在研究
 */
public class Test {

    /**
     * 读写锁
     */
    private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

    public static void main(String[] args) {
        new Thread() {

        }.start();
    }

    public void get(Thread thread) {
        rwl.readLock().lock();
        try {
            long start = System.currentTimeMillis();
            while (System.currentTimeMillis() - start <= 1) {
                System.out.println(thread.getName() + "正在进行读操作");
            }
            System.out.println(thread.getName() + "读操作完毕");

        } finally {
            rwl.readLock().unlock();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/wb_zjp283121/article/details/89448181