文章目录
- java多线程编程
-
- 一、java多线程技能
- 二、对象及变量的并发访问
-
- 2.1、synchronized同步方法
- 2.2、synchronized同步语句块
-
- 2.2.1、synchronized方法的弊端
- 2.2.2、synchronized同步代码块的使用
- 2.2.3、同步代码块解决同步方法的弊端
- 2.2.4、一半异步,一半同步
- 2.2.5、synchronized代码块间的同步性
- 2.2.6、println()方法也是同步的
- 2.2.7、验证同步synchronized(this)代码块是锁定当前对象的
- 2.2.8、将任意对象作为锁
- 2.2.9、多个锁就是异步执行
- 2.2.10、验证方法被调用是随机的
- 2.2.11、不同步导致的逻辑错误及其解决方法
- 2.2.12、细化验证3个结论
- 2.2.13、类Class的单例性
- 2.2.14、静态同步synchronized方法与synchronized(class)代码块
- 2.2.15、同步syn static方法可以对类的所有对象实例起作用
- 2.2.16、同步syn(class)代码块可以对类的所有对象实例起作用
- 2.2.17、String常量池特性与同步相关的问题与解决方案
- 2.2.18、同步synchronized方法无限等待问题与解决方案
- 2.2.19、多线程的死锁
- 2.2.20、内置类与静态内置类
- 2.2.21、内置类与同步:实验1
- 2.2.22、内置类与同步:实验2
- 2.2.23、锁对象改变导致异步执行
- 2.2.24、锁对象不改变已然同步执行
- 2.2.25、同步写法案例比较
- 2.3、volatile关键字
- 2.4、总结
- 三、线程间通信
-
- 3.1、wait/notify机制
-
- 3.1.2、wait/notify机制
- 3.1.3、wait/notify机制的原理
- 3.1.4、wait()方法的基本使用
- 3.1.5、完整实现wait/notify机制
- 3.1.6、使用wait/notify机制实现list.size()等于5时的线程销毁
- 3.1.7、对业务代码进行封装
- 3.1.8、线程状态的切换
- 3.1.9、wait()方法:立即释放锁
- 3.1.10、sleep()方法:不释放锁
- 3.1.11、notify()方法:不立即释放锁
- 3.1.12、interrupt()方法遇到wait()方法
- 3.1.13、notify()方法:只通知一个线程
- 3.1.14、notifyAll()方法:通知所有线程
- 3.1.15、wait(long)方法的基本使用
- 3.1.16、wait(long)方法自动向下运行需要重新持有锁
- 3.1.17、通知过早的问题与解决方法
- 3.1.18、wait条件发生变化与使用while的必要性
- 3.1.19、生产者/消费者模式的实现
- 3.1.20、通过管道进行线程间通信——字节流
- 3.2、join()方法的使用
- 3.3、类ThreadLocal的使用
- 3.4、类InheritableThreadLocal的使用
- 四、Lock对象的使用
-
- 4.1、使用ReentrantLock类
-
- 4.1.1、使用ReentrantLock实现同步
- 4.1.2、多代码块间的同步性
- 4.1.3、await()方法的使用与更正
- 4.1.4、使用await()和signal()实现wait/notify机制
- 4.1.5、await()方法暂停线程运行的原理
- 4.1.7、通知部分线程——唤醒部分线程
- 4.1.10、公平锁与非公平锁
- 4.1.11、public int getHoldCount()方法的作用
- 4.1.12、public final int getQueueLength()方法的作用
- 4.1.13、public int getWaitQueueLength(Condition condition)方法的作用
- 4.1.14、public final boolean hasQueuedThread(Thread thread)方法的作用
- 4.1.15、public final boolean hasQueuedThreads()方法的作用
- 4.1.16、public boolean hasWaiters(Condition condition)方法的作用
- 4.1.17、public final boolean isFair()方法的作用
- 4.1.18、public boolean isHeldByCurrentThread()方法的作用
- 4.1.19、public boolean isLocked()方法的作用
- 4.1.20、public void lockInterruptibly()方法的作用
- 4.1.21、public boolean tryLock()方法的作用
- 4.1.22、public boolean tryLock(long timeout, TimeUnit unit)方法的作用
- 4.1.23、public boolean await(long time, TimeUnit unit)方法的作用
- 4.1.24、public long awaitNanos(long nanosTimeout)方法的作用
- 4.1.25、public boolean awaitUnitil(Date deadline)方法的作用
- 4.2、使用ReentrantReadWriteLock类
- 五、定时器Timer
-
- 5.1、定时器Timer的使用
- 6.1、立即加载/饿汉模式
- 6.2、延迟加载/懒汉模式
- 6.3、使用静态内置类实现单例模式
- 6.4、序列化与反序列化的单例模式实现
- 6.5、使用static代码块实现单例模式
- 6.6、使用enum枚举数据类型实现单例模式
- 6.7、完善使用enum枚举数据类型实现单例模式
java多线程编程
一、java多线程技能
1.1、currentThread()方法
**currentThread()**方法可返回代码正在被那个线程调用。
执行Thread中的run()和start()是有区别的。
1)、thread.run();:立即执run()方法,不启动新的线程。
2)、thread.start();:执行run()方法实际不确定,启动新线程。
1.2、isAlive()方法
isAlive()方法的功能是判断当前线程是否存活状态。
存活状态:
如果线程处于运行或准备开始运行的状态,就认为是“存活”状态
1.3、sleep(long millis)方法
sleep()方法的作用是在是定的时间(毫秒)内让当前“正在执行的线程”休眠(暂停执行),这个“正在执行的线程”是指this.currentThread()返回的线程。
如果调用sleep()方法所在的类是Thread类,则可执行下列任意代码:
Thread