自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 wait和notify

面试题:实现一个容器,提供两个方法,add,size写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束方案:(1)使用wait和notify理由:如果给lists添加volatile之后,t2能够接到通知,但是,t2线程的死循环很浪费cpu,如果不用死循环,该怎么做呢?这里使用wait和notify,wait会释放锁,而notify不会释放锁需要注意的是,运用这种方法,必须要保证t2先执行,也就是首先让t2监听才可以no.

2021-02-28 17:32:59 99

原创 ReentrantLock

(1)/** * reentrantlock用于替代synchronized * 由于m1锁定this,只有m1执行完毕的时候,m2才能执行 * 这里是复习synchronized最原始的语义 * * 使用reentrantlock可以完成同样的功能 * 需要注意的是,必须要必须要必须要手动释放锁(重要的事情说三遍) * 使用syn锁定的话如果遇到异常,jvm会自动释放锁,但是lock必须手动释放锁,因此经常在finally中进行锁的释放 */public class T02_R.

2021-02-24 23:59:22 95

原创 AtomicLong和LongAdder

结论:AtomicLong底层CAS原理LongAdder底层线程分组CAS操作原理代理示例:public class T02_AtomicVsSyncVsLongAdder { static long count2 = 0L; static AtomicLong count1 = new AtomicLong(0L); static LongAdder count3 = new LongAdder(); public static void main(St.

2021-02-24 23:46:50 131

原创 CAS(无锁优化 自旋 乐观锁)

CAS(修改的值,期望值,更新值)

2021-02-24 22:52:37 115

原创 crond和crontab详解

博客 学院 下载 论坛 问答 代码 招聘 电子书 VIP会员创作中心收藏动态消息20crond和crontab详解置顶月已满西楼2017-06-08 16:16:3536719收藏15分类专栏:linux文章标签:操作系统crontablinux定时任务版权###一、crontab是什么?  1. 定时任务软件种类at    适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。crontab 需要...

2021-02-24 00:21:26 1312 1

原创 volatile

(1)保证线程可见性---MESI(CPU缓存一致性协议)代码示例:/** * volatile 关键字,使一个变量在多个线程间可见 * A B线程都用到一个变量,java默认是A线程中保留一份copy,这样如果B线程修改了该变量,则A线程未必知道 * 使用volatile关键字,会让所有线程都会读到变量的修改值 * * 在下面的代码中,running是存在于堆内存的t对象中 * 当线程t1开始运行的时候,会把running值从内存中读到t1线程的工作区,在运行过程中直接使用这个

2021-02-24 00:15:52 95

原创 synchronized的底层实现

synchronized的底层实现JDK早期的 重量级 - OS后来的改进锁升级的概念:sync (Object)markword 记录这个线程ID (偏向锁)如果线程争用升级为 自旋锁10次以后升级为重量级锁 - OS执行时间短(加锁代码),线程数少,用自旋执行时间长,线程数多,用系统锁...

2021-02-23 23:13:48 83

原创 线程---synchronized锁

(1)锁的概念:任何的线程去访问某个对象的时候,看一下这把锁是否属于我,是否由我占有。如果由我占有才可以对这个对象进行操作反之则不操作。代码示例:public class T { private int count = 10; private Object o = new Object(); public void m() { synchronized(o) { //任何线程要执行下面的代码,必须先拿到o的锁 count--;

2021-02-23 22:57:50 90

原创 线程的状态

(1)New(2)Runnable里边还有两个状态分别是:Ready就绪和Running运行(3)TimedWaiting等待(4)Waiting等待(3)Blocked堵塞 等待进入同步代码块的锁(3)Teminated结束这里需要说明一下Teminated之后不可以在Start!!!示例图:...

2021-02-22 23:51:32 200

原创 线程的3个方法

(1)Thread.sleep();(2)Thread.yield();概念:t1线程在运行,另外t2线程也在运行,当前t1线程在CPU上运行调用了一下yield(),从CPU先离开,另外t2线程可以在这执行。yield的t1进入等待队列中。本质是让出一下CPU,t2线程能否抢到进行执行t1不管。(3)Thread.join();概念:t1线程在运行,另外t2线程也在运行,t1的某一时刻调用了t2.join()。等待t2线程运行完毕,ti1再接着运行。面试题:有3个线程如何保证有序执行完

2021-02-22 23:33:55 153

原创 线程的启动方式

(1)类继承Thread接口,调用start方法。(2)类继承Thread接口,调用run方法。两者区别:两者程序执行的路径不同。start里的内容和main里的内容可以同时执行,run方法需要先执行它方法里的内容在执行main里的内容。实例代码:public class T01_WhatIsThread { private static class T1 extends Thread { @Override public void run() {

2021-02-22 22:31:59 177

原创 线程的概念

(1)一个程序里不同的执行路径,叫做一个线程。

2021-02-22 22:24:44 111

原创 谷歌浏览器chrome长截图功能,不用工具轻松截图

在谷歌浏览器chrome中打开需要截图的网页等待需要截图的网页打开完毕然后按F12 打开开发者工具然后按组合键 Ctrl+Shift+P 调出谷歌浏览器chrome长截图需要的面板然后输入 full ,这是时候就会看到下面出现 Capture full size screenshot点击这行文字,就可以截取当前整张网页了。长图如下...

2021-02-22 09:47:48 1531

原创 iBatis动态条件查询

iBatis动态条件查询(1)实例一:<!--动态条件分页查询--><sqlid="sql_count">select count(*)</sql><sqlid="sql_select">select *</sql><sqlid="sql_...

2021-02-04 15:15:00 896

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除