![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
_CoderZxk
Talk is cheap.Show me your code
展开
-
Java并发编程-线程究竟有多少种实现方式?
我们熟悉的继承extends和实现runnable接口实现线程,但是这就算两种吗?首先,先写出来这最基础的两种。Runnable接口实现线程方法public class ThreadBaseDemo1 implements Runnable { public static void main(String[] args) { new Thread(new ThreadBaseDemo1()).start(); } @Override public voi原创 2020-07-30 14:13:24 · 98 阅读 · 0 评论 -
Java并发编程-死锁
死锁就像两个人鞠躬,A说B起来我就起来,B说A起来我就起来,结果就陷入了僵局,谁也起不来。经典的哲学家问题,五个人有六只筷子,一起拿身边的一只筷子。这样的话谁也拿不到两只筷子吃饭,但是假如有顺序的进行,那就可以破坏掉死锁。package com.company.DeadLock;public class DL implements Runnable { static Object o1 = new Object(); static Object o2 = new Object()原创 2020-07-29 16:03:56 · 126 阅读 · 0 评论 -
Java并发编程-CAS
CAS英文全名(CompareAndSwap)比较与交换,它是具有原子性的,而且也是乐观锁的实现原理实现它的主要是有个比较值。在传入新的参数的时候,会将旧参数与系统内的旧参数进行对比后交换。public void cas(int expectedOldValue,int newVal){ if(expectedOldValue == systemOldValue){ systemOldValue=newVal; }}大致就是这么个意思,所以说,通过旧值控制更新,防止多线程错误的进行更新赋原创 2020-07-29 10:51:18 · 98 阅读 · 0 评论 -
Java并发编程-Java内存模型
首先,先理清Java内存模型和Java内存结构的区别Java内存结构是指JVM的内存结构,Java的运行是由Java虚拟机支撑的(Java Virtual Machine)Java内存结构堆区堆是存储类实例和数组的,通常是内存中最大的那一块,实例就是实例出来的对象,那么数组在堆区也很好理解,在Java中,数组也可以当作一个实例化的对象。虚拟机栈虚拟机栈保存局部变量和部分处理结果,并在方法调用和返回中起作用。方法区存储每个类的结构,例如运行时的常量池,字段和方法数据,构造原创 2020-07-27 18:04:48 · 123 阅读 · 0 评论 -
Java并发编程-线程间的协作
想象个场景,比如有10w的并发量,突如其来的流量处理肯定让线程处理不过来最终导致崩溃。在这种情况下,就有信号量这种东西了。SemaphoreSemaphore的构造函数是规定动用多少个线程进行处理先看一段不对线程用信号量处理的代码public class HttpRequestDemo implements Runnable { public static void main(String[] args) { ExecutorService executorService原创 2020-07-26 17:17:05 · 81 阅读 · 0 评论 -
Java并发编程-Future的使用
Future顾名思义,未来public class FutureDemo3 implements Callable<Integer> { public static void main(String[] args) { ExecutorService executorService= Executors.newFixedThreadPool(16); Future<Integer>future=executorService.submit(原创 2020-07-25 17:46:02 · 637 阅读 · 0 评论 -
Java并发编程-关于ThreadLocal那些事
第一版首先看一个SimpleDateFormat的例子 public static void main(String[] args) { new Thread(()->{ String date=new ThreadLocalDemo2().formatDate(1); System.out.println(date); }).start(); new Thread(()->{ String date=new Th原创 2020-07-24 18:28:05 · 55 阅读 · 0 评论 -
Java并发编程-AtomicInteger与synchronized实现Count的区别
首先,线程不安全的写法如下public class NotThreadCount { static int val = 0; public static void main(String[] args) throws InterruptedException { NotSafeThreadCount notSafeThreadCount=new NotSafeThreadCount(); Thread thread1=new Thread(notSafeTh原创 2020-07-23 11:17:30 · 218 阅读 · 0 评论 -
Java并发编程-LongAdder VS AtomicInteger
在计数的时候,有两个类LongAddr和AtomicInteger属于线程安全的并发类。但是各有千秋先看如下案例public class LongAddrMain { public static void main(String[] args) throws InterruptedException { LongAdder longAdder=new LongAdder(); ExecutorService executors=Executors.newFixe原创 2020-07-22 11:32:12 · 302 阅读 · 0 评论 -
Java中反射的基本使用
开宗明义反射的优点和好处:反射可以很灵活的操作一个类,甚至这种方式在某种方面我愿称之为优雅。Step 1.准备一个类,取名为ConstructorCollectorpublic class ConstructorCollector { ConstructorCollector() { System.out.println("====初始化 No Args========"); } ConstructorCollector(int intArgs, Str原创 2020-05-27 17:18:53 · 176 阅读 · 0 评论