Java多线程编程核心技术(第3版)
①全新正版,现货速发,7天无理由退换货②天津、成都、无锡、广东等多仓就近发货,订单最迟48小时内发出③无法指定快递④可开电子发票,不清楚的请咨询客服。
¥
91.43
7.1折
¥
129
全新
库存3件
作者高洪岩 著
出版社机械工业出版社
ISBN9787111698586
出版时间2022-01
装帧平装
开本16开
定价129元
货号31338962
上书时间2024-10-12
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
目录
前 言<br/>第1章 Java多线程技能 1<br/>1.1 进程和线程的定义及多线程的优点 1<br/>1.2 使用多线程 5<br/>1.2.1 继承Thread类 6<br/>1.2.2 使用常见的3个命令分析线程的信息 8<br/>1.2.3 线程随机性的展现 10<br/>1.2.4 执行start()的顺序不代表执行run()的顺序 12<br/>1.2.5 实现Runnable接口 14<br/>1.2.6 使用Runnable接口实现多线程的优点 15<br/>1.2.7 public Thread(Runnable target)中的target参数 16<br/>1.2.8 实例变量共享导致的“非线程安全”问题与相应的解决方案 18<br/>1.2.9 Servlet技术也会引起“非线程安全”问题 22<br/>1.2.10 留意i--与System.out.println()出现的“非线程安全”问题 25<br/>1.2.11 方法run()被JVM所调用 27<br/>1.3 方法currentThread() 27<br/>1.4 方法isAlive() 30<br/>1.5 方法sleep(long millis) 33<br/>1.6 方法sleep(long millis, int nanos) 34<br/>1.7 方法StackTraceElement[] getStack-Trace() 35<br/>1.8 方法static void dumpStack() 36<br/>1.9 方法Map<Thread, StackTrace-Element[]> getAllStackTraces() 37<br/>1.10 方法getId() 39<br/>1.11 停止线程 40<br/>1.11.1 停止不了的线程 41<br/>1.11.2 判断线程是不是停止状态 42<br/>1.11.3 清除中断状态的使用场景 44<br/>1.11.4 能停止的线程—异常法 48<br/>1.11.5 在sleep状态下停止 51<br/>1.11.6 使用stop()暴力停止线程 53<br/>1.11.7 方法stop()与java.lang.Thread-Death异常 55<br/>1.11.8 使用stop()释放锁导致数据结果不一致 57<br/>1.11.9 使用return;语句停止线程的缺点及相应的解决方案 59<br/>1.12 暂停线程 61<br/>1.12.1 方法suspend()与resume()的使用 62<br/>1.12.2 方法suspend()与resume()的缺点—独占 63<br/>1.12.3 方法suspend()与resume()的缺点—数据不完整 66<br/>1.12.4 使用LockSupport类实现线程暂停与恢复 67<br/>1.13 方法yield() 69<br/>1.14 线程的优先级 70<br/>1.14.1 线程优先级的继承特性 71<br/>1.14.2 线程优先级的规律性 72<br/>1.14.3 线程优先级的随机性 75<br/>1.14.4 看谁跑得快 76<br/>1.15 守护线程 78<br/>1.16 并发与并行 79<br/>1.17 同步与异步 80<br/>1.18 多核CPU不一定比单核CPU运行快 81<br/>1.19 本章小结 82<br/>第2章 对象及变量的并发访问 83<br/>2.1 synchronized同步方法 83<br/>2.1.1 方法内的变量是线程安全的 83<br/>2.1.2 实例变量“非线程安全”问题及解决方案 85<br/>2.1.3 同步synchronized在字节码指令中的原理 88<br/>2.1.4 多个对象多个锁 90<br/>2.1.5 synchronized方法将对象作为锁 92<br/>2.1.6 脏读与解决 97<br/>2.1.7 synchronized锁重入 99<br/>2.1.8 继承环境下的锁重入 100<br/>2.1.9 出现异常,锁自动释放 102<br/>2.1.10 非同步方法?:不使用synchronized重写方法 104<br/>2.2 synchronized同步语句块 106<br/>2.2.1 synchronized方法的弊端 106<br/>2.2.2 synchronized同步代码块的使用 109<br/>2.2.3 用同步代码块解决同步方法的弊端 111<br/>2.2.4 一半异步,一半同步 112<br/>2.2.5 synchronized代码块间的同步性 114<br/>2.2.6 方法println()也是同步的 116<br/>2.2.7 验证synchronized(this)同步代码块是锁定当前对象的 117<br/>2.2.8 将任意对象作为锁 119<br/>2.2.9 多个锁就是异步执行 121<br/>2.2.10 验证方法被调用是随机的 124<br/>2.2.11 不同步导致的逻辑错误与解决方案 125<br/>2.2.12 细化验证3个结论 129<br/>2.2.13 类对象的单例性 134<br/>2.2.14 静态同步?:synchronized方法与synchronized(class)代码块 135<br/>2.2.15 同步synchronized方法可以对类的所有对象实例起作用 139<br/>2.2.16 同步synchronized(class)代码块可以对类的所有对象实例起作用 141<br/>2.2.17 String常量池特性与同步问题 143<br/>2.2.18 synchronized方法无限等待问题与解决方案 146<br/>2.2.19 多线程的死锁 148<br/>2.2.20 内置类与静态内置类 150<br/>2.2.21 内置类与同步?:实验1 153<br/>2.2.22 内置类与同步?:实验2 155<br/>2.2.23 锁对象改变导致异步执行 156<br/>2.2.24 锁对象不改变依然是同步执行 159<br/>2.2.25 同步写法案例比较 161<br/>2.2.26 方法holdsLock(Object obj)的使用 161<br/>2.2.27 临界区 162<br/>2.3 volatile关键字 162<br/>2.3.1 可见性的测试 163<br/>2.3.2 原子性与非原子性的测试 171<br/>2.3.3 禁止代码重排序的测试 179<br/>2.4 本章小结 190<br/>第3章 线程间通信 191<br/>3.1 wait/ notify机制 191<br/>3.1.1 不使用wait/notify机制进行通信的缺点 191<br/>3.1.2 什么是wait/notify机制 194<br/>3.1.3 wait/notify机制的原理 194<br/>3.1.4 方法wait()的基本用法 195<br/>3.1.5 使用代码完整实现wait /notify机制 196<br/>3.1.6 使用wait/notify机制实现线程销毁 198<br/>3.1.7 对业务代码进行封装 200<br/>3.1.8 线程状态的切换 203<br/>3.1.9 方法wait()导致锁立即释放 204<br/>3.1.10 方法sleep()不释放锁 206<br/>3.1.11 方法notify()不立即释放锁 206<br/>3.1.12 方法interrupt()遇到方法wait() 208<br/>3.1.13 方法notify()只通知一个线程 210<br/>3.1.14 方法notifyAll()通知所有线程 212<br/>3.1.15 方法wait(long)的基本用法 213<br/>3.1.16 方法wait(long)自动向下运行的条件 215<br/>3.1.17 通知过早与相应的解决方案 218<br/>3.1.18 等待条件发生变化 220<br/>3.1.19 生产者/消费者模式实现 224<br/>3.1.20 在管道中传递字节流 239<br/>3.1.21 在管道中传递字符流 241<br/>3.1.22 利用wait/notify机制实现交叉备份 244<br/>3.1.23 方法sleep()和wait()的区别 247<br/>3.2 方法join()的使用 247<br/>3.2.1 学习方法join()前的铺垫 247<br/>3.2.2 用方法join()解决问题 248<br/>3.2.3 方法join()和interrupt()出现异常 250<br/>3.2.4 方法join(long)的使用 252<br/>3.2.5 方法join(long)与sleep(long)的区别 254<br/>3.2.6 方法join()后的代码提前运行 257<br/>3.2.7 方法join(long millis, int nanos)的使用 261<br/>3.3 类ThreadLocal的使用 262<br/>3.3.1 方法get()与null 262<br/>3.3.2 类ThreadLocal存取数据流程分析 263<br/>3.3.3 验证线程变量的隔离性 266<br/>3.3.4 解决get()返回null的问题 270<br/>3.3.5 验证重写initialValue()方法的隔离性 271<br/>3.3.6 使用remove()方法的必要性 272<br/>3.4 类InheritableThreadLocal的使用 276<br/>3.4.1 类ThreadLocal不能实现值继承 277<br/>3.4.2 使用InheritableThreadLocal体现值继承特性 278<br/>3.4.3 值继承特性在源代码中的执行流程 280<br/>3.4.4 父线程有最新的值,子线程还是旧值?:不可变类型 285<br/>3.4.5 子线程有最新的值,父线程还是旧值?:不可变类型 286<br/>3.4.6 子线程可以感应对象属性值的变化?:可变类型 288<br/>3.4.7 重写childValue方法实现对继承值的加工 291<br/>3.5 本章小结 291<br/>第4章 锁的使用 292<br/>4.1 使用ReentrantLock类 292<br/>4.1.1 使用ReentrantLock实现同步 292<br/>4.1.2 验证多代码块间的同步性 294<br/>4.1.3 方法await()的错误用法与相应的解决方案 297<br/>4.1.4 使用方法await()和方法signal()实现wait/notify 300<br/>4.1.5 方法await()暂停的原理 302<br/>4.1.6 通知部分线程?:错误用法 306<br/>4.1.7 通知部分线程?:正确用法 308<br/>4.1.8 实现生产者/消费者模式一对一交替打印 311<br/>4.1.9 实现生产者/消费者模式多对多交替打印 313<br/>4.1.10 公平锁与非公平锁 315<br/>4.1.11 方法getHoldCount()的使用 318<br/>4.1.12 方法getQueueLength()的使用 319<br/>4.1.13 方法getWaitQueueLength(Condition condition)的使用 321<br/>4.1.14 方法hasQueuedThread(Thread thread)的使用 322<br/>4.1.15 方法hasQueuedThreads()的使用 323<br/>4.1.16 方法hasWaiters(Condition condition)的使用 324<br/>4.1.17 方法isFair()的使用 326<br/>4.1.18 方法isHeldByCurrentThread()的使用 326<br/>4.1.19 方法isLocked()的使用 327<br/>4.1.20 方法lockInterruptibly()的使用 328<br/>4.1.21 方法tryLock()的使用 330<br/>4.1.22 方法tryLock(long timeout, Time-Unit unit)的使用 331<br/>4.1.23 方法await(long time, TimeUnit unit)的使用 333<br/>4.1.24 方法awaitNanos(long nanos-Timeout)的使用 334<br/>4.1.25 方法awaitUntil(Date deadline)的使用 335<br/>4.1.26 方法awaitUninterruptibly()的使用 337<br/>4.1.27 实现线程按顺序执行业务 339<br/>4.2 使用ReentrantReadWriteLock类 342<br/>4.2.1 类ReentrantLock的缺点 342<br/>4.2.2 读读共享 344<br/>4.2.3 写写互斥 344<br/>4.2.4 读写互斥 345<br/>4.2.5 写读互斥 346<br/>4.3 本章小结 347<br/>第5章 定时器 348<br/>5.1 定时器的使用 348<br/>5.1.1 方法schedule(TimerTask task, Date time)的测试 349<br/>5.1.2 方法schedule(TimerTask task, Date f?irstTime, long period)的测试 357<br/>5.1.3 方法schedule(TimerTask task, long delay)的测试 365<br/>5.1.4 方法schedule(TimerTask task, long delay, long period)的测试 365<br/>5.1.5 方法scheduleAtFixedRate(TimerTask task, Date f?irst-Time, long period)的测试 366<br/>5.2 本章小结 374<br/>第6章 单例模式与多线程 375<br/>6.1 单例模式与多线程 375<br/>6.1.1 立即加载/饿汉模式 375<br/>6.1.2 延迟加载/懒汉模式 377<br/>6.1.3 使用静态内置类实现单例模式 388<br/>6.1.4 序列化与反序列化的单例模式实现 389<br/>6.1.5 使用static代码块实现单例模式 392<br/>6.1.6 使用enum枚举数据类型实现单例模式 393<br/>6.1.7 完善使用enum枚举实现单例模式 394<br/>6.2 本章小结 396<br/>第7章 拾遗增补 397<br/>7.1 线程的状态 397<br/>7.1.1 验证NEW、RUNNABLE和TERMINATED 399<br/>7.1.2 验证TIMED_WAITING 400<br/>7.1.3 验证BLOCKED 401<br/>7.1.4 验证WAITING 403<br/>7.2 线程组 404<br/>7.2.1 线程对象关联线程组?:一级关联 404<br/>7.2.2 线程对象关联线程组?:多级关联 406<br/>7.2.3 线程组自动归属特性 407<br/>7.2.4 获取根线程组 408<br/>7.2.5 线程组内加线程组 409<br/>7.2.6 组内的线程批量停止 409<br/>7.2.7 递归取得与非递归取得组内对象 410<br/>7.3 Thread.activeCount()方法的使用 412<br/>7.4 Thread.enumerate(Thread tarray[])方法的使用 412<br/>7.5 再次验证线程执行有序性 412<br/>7.6 类SimpleDateFormat非线程安全 414<br/>7.6.1 出现异常 415<br/>7.6.2 解决方法1 417<br/>7.6.3 解决方法2 418<br/>7.7 线程中出现异常的处理 420<br/>7.7.1 线程出现异常的默认行为 420<br/>7.7.2 使用setUncaughtException-Handler()方法进行异常处理 421<br/>7.7.3 使用setDefaultUncaught-ExceptionHandler()方法进行异常处理 422<br/>7.8 线程组内处理异常 423<br/>7.9 线程异常处理的优先性 426<br/>7.10 本章小结 431<br/>第8章 并发集合框架 432<br/>8.1 集合框架结构 432<br/>8.1.1 接口Iterable 432<br/>8.1.2 接口Collection 432<br/>8.1.3 接口List 433<br/>8.1.4 接口Set 434<br/>8.1.5 接口Queue 435<br/>8.1.6 接口Deque 435<br/>8.2 非阻塞队列 435<br/>8.2.1 类ConcurrentHashMap的使用 436<br/>8.2.2 类ConcurrentSkipListMap的使用 442<br/>8.2.3 类ConcurrentS
— 没有更多了 —
以下为对购买帮助不大的评价