随笔分类 -  并发

摘要:千万千万不要把java中的线程状态和操作系统中的线程状态弄混淆,如果线程状态没有搞清楚,并发编程就无从谈起。 在Java JDK类库中的Thread类里,只定义了6种状态。 Blocked:阻塞状态,等待锁的释放 New:未启动状态 Runnable:可运行状态,包括(运行和就绪状态) Termin 阅读全文
posted @ 2020-03-15 22:25 卑微芒果 阅读(676) 评论(0) 推荐(0)
摘要:线程让步Thread.yield():当前线程已经把重要的部分执行完毕,此时可以切换线程。 class MyThread implements Runnable { public void run() { int i = 0; while(i < 6) { System.out.println(Th 阅读全文
posted @ 2020-03-15 22:24 卑微芒果 阅读(308) 评论(0) 推荐(0)
摘要:Thread.sleep(ms):当前线程进入Time—Wait状态,并等待指定时间。 与wait的区别:wait只能用于同步块中,wait释放锁。 class MyThread implements Runnable { public void run() { int i = 0; while(i 阅读全文
posted @ 2020-03-15 22:23 卑微芒果 阅读(1920) 评论(0) 推荐(0)
摘要:join():当前线程等待子线程终止 class MyThread implements Runnable { public void run() { int i = 0; while(i < 100) { System.out.println(Thread.currentThread() + " 阅读全文
posted @ 2020-03-15 22:21 卑微芒果 阅读(148) 评论(0) 推荐(0)
摘要:synchronized关键字定义同步代码块活方法,进入同步代码块的线程获得该对象的锁。锁没有释放,其他线程阻塞,锁释放,其他线程争锁。 实例锁:synchronized修饰非静态方法,线程获得普通对象的锁。 类锁:synchronized修饰静态方法,线程获得Class对象的锁。 class My 阅读全文
posted @ 2020-03-15 22:20 卑微芒果 阅读(138) 评论(0) 推荐(0)
摘要:1、Interrupt() 当该线程处于Runnable状态时,调用Interrupt()设置该线程中断标志 当线程处于Wait状态时,调用interrupt()该线程抛出异常并清除中断标志 当线程处于Blocked的状态时,调用interruput(),线程不响应中断,线程会在获得锁后自中断一次 阅读全文
posted @ 2020-03-15 22:19 卑微芒果 阅读(338) 评论(0) 推荐(0)
摘要:1、JAVA内存模型(注意与JVM内存模型的区别) 内存模型:定义一组规范,围绕可见性、原子性、有序性定义变量的访问方式,屏蔽软硬件差异达到内存一致性效果。 2、volatile关键字 可见性:内存屏障保证写操作立刻刷新缓存,读操作要从内存读取最新值到工作内存 禁止指令重排:(针对普通无锁的全局变量 阅读全文
posted @ 2020-03-15 22:18 卑微芒果 阅读(265) 评论(0) 推荐(0)
摘要:1、乐观锁与悲观锁 悲观锁:假设一定会发生问题,所以要进行加锁。 乐观锁:假设不会发生问题,边运行边检测冲突,发生冲突采取补偿措施,一般是不断重试。(CAS) 乐观锁适用于发生冲突频率不高的情况,悲观锁适用于发生冲突频率高情况(使用乐观锁就会不断重试开销很大) 2、公平锁与非公平锁 公平锁:多线程在 阅读全文
posted @ 2020-03-15 22:17 卑微芒果 阅读(542) 评论(0) 推荐(0)
摘要:1、直接继承Thread package newthrow; class MyThread extends Thread { MyThread(String name) { super(name); } public void run() { int i = 0; while(i < 20) { S 阅读全文
posted @ 2020-03-15 22:16 卑微芒果 阅读(226) 评论(0) 推荐(0)