摘要:
CAS,即Compare and Switch,比较-替换,里面有三个操作数:内存值V、旧的预期值A、要修改的值B; 当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返回false。 CAS一定要和volatile变量配合使用,这样才能保证每次拿到的变量是主内存中最新 阅读全文
摘要:
抢占式。一个线程用完CPU之后,操作系统会根据线程优先级、线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行。 操作系统中可能会出现某条线程常常获取到VPU控制权的情况,为了让某些优先级比较低的线程也能获取到CPU控制权,可以使用Thread.sleep(0)手动触发一次操作系统分 阅读全文
摘要:
定义:线程局部变量是局限于线程内的变量,属于线程自身所有,不在多个线程间共享。java提供ThreadLocal类来支持线程局部变量,是一个实现线程安全的方式。 任何线程局部变量一旦在工作完成后没有释放,java应用就存在内存泄露的风险 作用:ThreadLocal是一种以空间换时间的做法,在每一个 阅读全文
摘要:
wait()方法和notify()方法的区别: 这两个方法都是属于Object类中的,也是配套使用的,当调用这两个方法阻塞时要释放占用的锁,而锁是任何对象都具有的,调用任意对象的wait()方法导致线程阻塞,并且该对象上的锁被释放; 而调用任意对象的notify()方法则导致从调用该对象的wait( 阅读全文
摘要:
start()方法被用来启动新创建的线程,而且start()内部调用了run()方法, 区别: 当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动; start()方法才会启动新的线程 阅读全文
摘要:
多线程会共同使用一组计算机上的CPU,而线程数大于给程序分配的CPU数量时,为了让各个线程都有执行的机会,就需要轮流使用CPU。不同的线程切换使用CPU发生的数据切换等就是上下文切换 阅读全文
摘要:
程序运行完毕,jvm会等待非守护线程完成后关闭,但是jvm不会等待守护线程。 守护线程最典型的的例子是:GC线程 阅读全文
摘要:
常用的有两种办法: 阅读全文
摘要:
类型 位数 字节数 short 2*8 2 char 2*8 2 int 4*8 4 float 4*8 4 long 8*8 8 double 8*8 8 阅读全文
摘要:
finally:finally是一个关键字,与try和catch一起用于异常的处理,finally块一定会执行,无论在try快中是否有发生异常。 finalize:finalize方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用finalize没有保证。 final是最重要的,以下重点介绍以下:1、可以修饰类,不可以被继承;2、可以修饰方法,不可以被重写;... 阅读全文