摘要:
获取锁定 void lock():常用获取锁定的方法 void lockInterruptibly():如果当前线程未被中断,则获取锁定;如果当前线程被中断,则出现异常 boolean tryLock():调用时锁定未被另一个线程持有的情况下,才会获取该锁定 boolean tryLock(long 阅读全文
摘要:
Lock锁分为公平锁和非公平锁两种 公平锁:线程获取锁的顺序是按照线程加锁的顺序来分配的,即先来先得的FIFO先进先出顺序 非公平锁:一种获取锁的抢占机制,是随机获取锁的,和公平锁的区别就是先来的不一定先得到锁,导致某些线程可能一直拿不到锁,所以是不公平的 公平锁,就是很公平,在并发环境中,每个线程 阅读全文
摘要:
Condition类有很好的灵活性,可以实现多路通知功能,一个Lock对象中可以创建多个Condition对象实例,线程对象可以注册在指定的Condition中,进而有选择的进行线程通知,在调度线程上更加灵活 wait与notify/notifyAll进行等待通知时,被通知的线程是随机的,但是Con 阅读全文
摘要:
场景描述: 项目中通过java代码中从数据库中查询一系列数据,对数据做相应处理,然后通过字符流将数据写如一个新生成的文件中,将该项目部署在linux服务器上,最后生成的文件拿到本地使用notepad++打开会在部分数据末尾出现NUL 排查原因: NUL在C语言中是一个特殊字符常量'\0',空字符 在 阅读全文
摘要:
实现变量值的共享,可以使用public static变量的形式,这种形式修饰的变量在所有使用该变量的线程间都是共享的 使用ThreadLocal也可以实现变量值的共享,这种共享旨在实现每个线程自己的变量共享 threadLocal对象在第一次调用get()方法时返回null,然后通过调用set()方 阅读全文
摘要:
测试案例 测试类 打印结果 结果是0,并没有被修改成10,说明main线程在thread线程之前执行完成了 如何获取修改后的count值?使用join方法 测试类 打印结果 原因分析 join源码 join方法使得当前线程进入阻塞状态,进入排队队列的作用,且必须等待调用join的线程对象执行完run 阅读全文
摘要:
join(long)方法的源代码 sleep(long)方法的源代码 1 public static native void sleep(long millis) throws InterruptedException; 从源代码中可以发现,join(long)方法内部使用wait(long)实现, 阅读全文
摘要:
管道流主要用于在不同线程间直接传送数据 一个线程发送数据到输出管道,另一个线程从输入管道中读取数据,进而实现不同线程间的通信 字节管道流 字节流 线程类 测试类 打印输出 线程threadR先被启动,但是因为管道流中并没有数据,所以线程会阻塞在in.read(bytes)这里,直到有数据被写入,才会 阅读全文