Java
此去正年少
每天进步一点点
展开
-
一个简单的死锁的java实现
下面代码模拟了多线程情境下,使用synchronized不当造成的死锁:public class DeadlockTest { private static Object lockA = new Object(); private static Object lockB = new Object(); private static int value = 0; private static int another = 0; public static void原创 2021-02-23 10:22:04 · 929 阅读 · 1 评论 -
使用ReentrantLock进行线程同步
模拟两个线程同时进行同一块耗时处理,使用ReentrantLock进行线程同步:下面是正常的同步代码练习:import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class LockTest { private static final Lock lock = new Reentran原创 2021-02-23 10:06:05 · 300 阅读 · 0 评论 -
几个常用排序算法的实现
import java.util.Arrays;public class SortTest { private static int[] nums = {5,2,9,4,0,7,3,8,6,1}; public static void main(String[] args) { System.out.println("nums:"+Arrays.toString(nums));// int[] result = maoPaoSort(nums);//原创 2020-12-03 22:01:55 · 237 阅读 · 0 评论 -
Android Retrofit与Spring后台配合,实现单张、多张图片上传功能
前言最近在学写后台接口,想做个图片上传接口与Android客户端配合使用。Android这边我用的Retrofit网络请求框架。但是发现我把Android这边写好了,后台不知道该怎么接收;后台接口定义好了,Android这边不知道怎么传参。网上的资料也基本都是只讲一方面的,不讲怎么配合使用。那么我自己研究了一下实现了功能,在这里总结下。后台接口这里为了更详细的说明使用方法,我加了个use...原创 2020-03-09 18:54:19 · 1141 阅读 · 3 评论 -
RxJava用法入门及操作符讲解,简单易懂
RxJava基础用法讲解:本篇文章从最基础的RxJava讲解,说明RxJava的基本操作符的用法及作用:RxJava是基于观察者模式的,简而言之就是观察者订阅了被观察者,然后被观察者产生的数据变化会通知到观察者,观察者从而作出反应。这里就不多做讲解了。在RxJava里,观察者用Observer类或者Subscriber类表示,其中后者是前者的实现类,两者用法基本相同。被观察者用Observ...原创 2019-10-16 20:55:42 · 2390 阅读 · 0 评论 -
Java volatile关键字实例
volatile关键字能保证可见性和有序性,但是不保证原子性。因此并不能保证线程安全。看一个相关的例子:双重校验锁实现的单例模式:public class DoubleCheckSymbol { private static volatile DoubleCheckSymbol d; private DoubleCheckSymbol() {} public static原创 2017-07-04 21:43:18 · 3154 阅读 · 0 评论 -
List的removeAll()方法与equals()方法之坑
最新在项目中遇到一个坑,大概如下:public class MainTest { public static void main(String[] args) { //创建一个List1对象,添加四个元素 List<Operator> list1 = new ArrayList<>(); Operator op1 = new Operator(0原创 2017-07-19 22:09:15 · 3202 阅读 · 0 评论 -
Java 类会执行初始化的5种情况
来自:《深入理解Java虚拟机》原创 2017-06-25 14:37:37 · 2763 阅读 · 0 评论 -
Java类加载与初始化测试
类的初始化与类构造方法执行顺序原创 2017-06-25 12:59:08 · 818 阅读 · 0 评论 -
Java 序列化方式实现深克隆
// 用序列化与反序列化实现深克隆 private Object deepClone(Object src) { Object o = null; try { if (src != null) { ByteArrayOutputStream baos = new B原创 2017-10-09 12:22:14 · 1392 阅读 · 0 评论 -
对ThreadLocal在Handler中的应用的一些理解
前言 JDK源码的ThreadLocal类和Android SDK的ThreadLocal类细节略有不同,但原理和实现的功能是相同的。本文的代码均来自Android SDK源码。ThreadLocal可以翻译为“线程内部存储”,它不是一个线程,而是用于存储对象,线程内部获取到的这个对象是唯一的,而不同线程获取的这个对象则是不同的对象。也即,这个对象的作用域是线程,而不是平常我们使用的包内...原创 2018-08-02 10:25:24 · 2400 阅读 · 3 评论 -
Java8特性lambda表达式、函数式接口和方法引用的一个应用实例
前几天在一个直播课程上看到这样一种写法:public class AtomicDemo { public static void hellooo() { System.out.println("hello"); } public static void main(String[] args){ new Thread(Atomic...原创 2018-12-12 21:22:02 · 478 阅读 · 1 评论 -
对Thread的start()和run()的一些认识
通常我们需要在新线程里执行操作时,可以这么写:写法一: 在需要的地方调用new MyThread().start(),并重写匿名Thread类的run方法,如下; new Thread() { @Override public void run() { System.out.println(&amp;quot;Thread run&amp;quot;); } }.start();输出:Thre...原创 2018-12-06 13:43:18 · 2563 阅读 · 0 评论 -
对HTTP和HTTPS的一些认识
HTTP(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。HTTPS (HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 比HTTP多了加密的步骤,用于安全的 HTTP 数据传输。HTTP版本演变:http协议...原创 2019-01-07 21:41:44 · 254 阅读 · 0 评论 -
带着问题看源码 — 面试必备:理解Java线程池的运行原理
简单来说,线程池就是一个线程管理器,可以管理一组线程使其可重复利用。使用线程池的好处在于可以减少创建和销毁线程的开销,同时可避免不受控制的创建新线程可能导致的OOM等问题。本文将按个人理解,对照源码来解答有关线程池的几个关键问题。线程池的构造方法的各个参数是什么作用?线程池对于新来的任务,会怎么分配?Java默认提供的线程池有哪几种?分别有什么特性,适用场景是什么?线程池是如何做到线...原创 2019-06-30 22:20:10 · 734 阅读 · 0 评论 -
Java 用Collections.addAll()方法给Stack和LinkedList添加元素,结果不同
如题,用Collections.addAll()方法给Stack和LinkedList添加元素,添加进去的顺序是不同的。 下面的代码说明了这个结果:package com.lwc.Stack;import java.util.Collections;import java.util.LinkedList;import java.util.Stack;public class StackTest原创 2017-06-04 21:57:19 · 2512 阅读 · 0 评论 -
Java 对象比较,equals和==的比较结果
1.看下面的代码,输出什么呢?Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1==n2); 答案是: 输出 false。为什么n1和n2的值相同,用“==”比较结果却是false呢? 因为“==”比较的不是对象的值,而是对象的引用。而n1和n2引用两个不同原创 2017-05-06 18:44:05 · 1382 阅读 · 0 评论 -
Java程序在命令行下编译运行打Jar包
本次练习在命令行下编译运行java程序,以及将java程序打jar包运行。一、本程序有三个类, Teacher类:public class Teacher { private String name; private String subject; Teacher() {}; Teacher(String name, String subject) {原创 2016-01-27 23:16:31 · 2189 阅读 · 0 评论 -
Java接口与抽象类的区别
一、接口中的方法全都是抽象方法,即使不加abstract关键字,也默认是抽象方法。如果哪个类实现了改接口,则必须实现所有接口中的抽象方法。 接口没有构造方法。 public interface Person { public void move(); //move()默认为抽象方法。 } 而抽象类中可以有抽象方法,也可以有非抽象方法。一个类如果继承了另一个类,则必须实现那个父类中的原创 2016-01-19 23:01:50 · 561 阅读 · 0 评论 -
Java抽象类与抽象方法
一、 定义一个抽象类Animal:public abstract class Animal {}这个类里面现在什么都没有。那么它里面可以有什么?我们试着给它加上成员变量,成员方法等,看看行不行。public abstract class Animal { public Animal() {}; int quality; public void eat() {};原创 2016-01-18 23:21:25 · 996 阅读 · 0 评论 -
Java的this与super关键字
一、public class Father { private int a = 0; public Father() { System.out.println("Father:constructor"); } public void set_a(int num) { this.a = num; System.out.prin原创 2016-01-15 00:07:35 · 550 阅读 · 0 评论 -
多线程同步锁的使用范例
用一个买票的例子来示范多线程操作一个对象时,同步锁的使用。如何加锁需要认真思考。原创 2016-11-14 23:10:36 · 5531 阅读 · 0 评论 -
Java传参练习
关于Java的参数传递,值传递,一直都没有动手实践过,今天来亲自动手看看:下面是Demo程序:public class ValueTest { public static void main(String args[]) { int a = 0; String str = "default string"; System.out.println("原创 2017-02-19 17:48:28 · 544 阅读 · 2 评论 -
Math.round()方法
Math.round()方法即为我们常说的“四舍五入”方法,但用起来不注意的话就会犯错。注意Math.round(-1.5),也就是-1.5“四舍五入”的结果并不是-2,而是-1。这是为什么呢?原创 2017-02-19 18:34:57 · 96994 阅读 · 5 评论 -
Java instanceof 关键字用法示例
if (a instanceof A)表示判断:如果a是A类的一个实例。 如果一个父类有多个子类,每个子类中都有自己特有的方法,怎么判断一个对象是哪个子类的实例并调用子类中特有的方法呢?instanceof可以起到作用。原创 2016-06-08 00:06:10 · 866 阅读 · 0 评论