- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 HarmonyOS-Android混合开发,直接“吞并”APK,这路子太野了
先给HarmonyOS比个心心随着HarmonyOS2.0发布,HarmonyOS更加地进入大众视野,也越来越多的开发者涉足HarmonyOS领域,HarmonyOS的生态建设也在逐渐扩大、深入。虽然HarmonyOS有着强大的分布式场景、AI等高级能力,但是毕竟还处于新生面世阶段,对于一些开发组件、生态市场等还有着一定的不成熟。最近想用HarmonyOS开发一款智慧场景的应用,深入了解后,无奈发现HarmonyOS对于相应的场景支持并不给力,所以就打算用Android开发并融合HarmonyOS的智慧
2021-09-06 04:31:05 2674 1
原创 Java多线程-顺序输出ABC
多个线程想要执行同一同步代码块,则需要先抢占锁资源,要实现顺序输出ABC还要对同步代码块实现顺序访问,本文将采用synchronized、Lock-Condition、Semaphore的方式实现。如果不了解Lock-Conditionk和Semaphore请先浏览学习我后续发布的JUC章节中相关知识点。synchronized方式public class ABCsynchronizedDemo { public static void main(String[] args) {
2021-02-23 09:41:52 530 1
原创 Java多线程-ThreadLocal解析
ThreadLocal是一个本地线程副本变量工具类,该变量的作用域为当前线程。每个线程都有自己的ThreadLocal,且它们是相互隔离的。这样可以用来避免资源竞争带来的多线程问题。ThreadLocalMapThreadLocalMap是ThreadLocal中的静态内部类,我们先对ThreadLocalMap进行分析,以便于我们更好的理解ThreadLocal的操作原理。ThreadLocalMap是一个存储键值对的数组集合,存储键值对的类为ThreadLocalMap的静态内部类Entry,En
2021-02-23 09:41:11 188
原创 Java多线程-线程通信
wait()、notify()、notifyAll()、都是Object中的final native方法,用于线程通信,是Java通过消息传递来实现线程通信的方式。他们都只能在同步方法或同步代码块中执行,而且必须是内置锁。wait()语义:使当前线程立即停止运行,释放对象锁,处于等待阻塞状态,并将当前线程置入锁对象的等待池中,直到被唤醒或被中断为止。重载:wait();死等,直到被唤醒或被中断。wait(long timeout);超时等待:若在规定的时间内未被唤醒,则继续执行wait(lon
2021-02-23 09:40:39 198 1
原创 Java多线程-synchronized和volatile区别
锁提供了两种主要特性:互斥性:一次只允许一个线程持有某个锁可见性:确保新值立即同步到主存,每次使用前立即从主存刷新synchronized和volatile:为了保证多线程读写数据时数据的一致性synchronized同步:释放锁之前将会对变量的修改刷新到主存中;阻塞;synchronized可以保证变量修改的可见性和原子性volatile:确保新值立即同步到主存,每次使用前立即从主存刷新,可以理解为直接操作主存,实现变量修改的可见性,有序性;非阻塞;volatile:对任意单
2021-02-23 09:40:08 326 1
原创 Java多线程-synchronized使用分析
synchronized是Jdk的内置同步锁,用于实现多线程对共享资源的同步访问。使用方式:1.synchronized普通方法// 同步方法public synchronized void test() { // 同步代码块 // 锁对象为当前对象}2.synchronized静态方法// 同步静态方法public synchronized static void test() { // 同步代码块 // 锁对象为当前类对象}3.synchroniz
2021-02-23 09:39:35 276 2
原创 Java多线程-Thread常用方法
sleep() 线程休眠使当前线程休眠,但不会释放对象的同步锁;运行状态 -> 休眠(阻塞状态);线程休眠的时间大于指定的休眠时间就会重新被唤醒,阻塞状态 -> 就绪状态,从而等待CPU的调度执行;yield() 线程让步立即中止当前线程的执行,重新争夺CPU,但不会释放对象的同步锁(用在同步代码块中就没意义了);运行状态 -> 就绪状态;以便让其他具有相同优先级的等待线程获取执行权,也可能当前线又进入运行状态;join() 线程合并将
2021-02-23 09:39:06 126
原创 Java多线程-线程创建方式
线程创建方式继承Thread实现Runable实现CallableThreadThread是普通类,实现多线程的方式是继承该类,并重写run()方法,通过start()方法启动线程。RunableRunable是接口,实现多线程的方式是实现该接口,重写run()方法,并将该实现类对象传入Thread对象,通过Thread对象的start()方法启动线程。run()方法体就是线程的执行体。Thread和Runnable的关系Thread实现了Runable接口,在Runable
2021-02-23 09:37:52 99 1
原创 Java多线程-前述
概述:线程是JVM调度的最小单元。线程依赖于进程,进程由线程组成。同一时刻一个线程只能在一个CPU上运行。但随着CPU核数的增加,计算机硬件的计算能力得到提升,这样的运行方式显然造成了资源浪费。其次,为了提高系统的响应速度,同一时刻处理不同的请求,所以我们需要多线程来更加充分地利用计算机资源,实现更快的请求响应。线程的生命周期Java线程的五大状态NEW:线程对象被创建后,就进入了新建状态。RUNNABLE:也称为可执行状态。线程对象被创建后,其他线程调用了该对象的start()方法,但
2021-02-22 18:04:37 118
原创 Java基础集合-HashMap1.8
HashMap介绍HashMap是基于哈希表的Map接口实现,它提供了Map的所有操作,并且允许键值为null的键值对(最多只能有一个键值对的键为null,键的hash值会由0代替)。HashMap大致和HashTable相同,只是HashMap是非同步的,以及允许为null的键值。需要注意的是JDK1.7和JDK1.8有着完全不同的HashMap实现,下面只对JDK1,8的HashMap展开分析。HashMap实例的性能取决于两个参数:初始容量:哈希表创建时的桶数负载因子:哈希表扩容的度量
2021-02-22 18:01:19 223
原创 Java基础集合-Map接口
Map集合是独立于Collection体系的集合。Map集合的特点:存储结构:双列集合,它是双列集合,直接子元素为键值对Entry,数据元素为Entry中的key-value。key和value分别可以抽取出成为一个集合存放无序:不保证元素添加的顺序。但是有子类实现有序集合(LinkedHashMap)和排序集合(TreeMap)元素不可重复:是否重复有key决定,最多包含一个为null的键。通过equals和hashCode确定元素的唯一性元素没有下标:存放无序,也就无法通过下.
2021-02-22 18:00:06 77
原创 Java基础集合-LinkedList源码分析
LinkedList也是List接口下的实现类,用法和ArrayList。但和ArrayList不同的是,LinkedList是用双向链表实现的。因为LinkedList由链表实现,所以没有扩容机制。LinkedList还实现了Deque接口,具有双端队列的功能,同时它可以作为栈使用。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Dequ
2021-02-22 17:58:41 124
原创 Java基础集合-ArrayList源码分析
ArrayList是数组实现的一个动态数组,同样也支持随机访问,与普通数组相比,它的容量可以动态增长,且支持泛型。ArrayList实现了List接口,实现了对数组的添加、删除、修改、遍历等操作。ArrayList是非线程安全的集合,多线程环境下建议使用CopyOnWriteArrayList内部类内部类描述ArrayListSpliterator可分隔的并行迭代器Itr迭代器ListItr双向迭代器SubList子列表属性/** * 列表
2021-02-22 17:58:00 96
原创 Java基础集合-List接口
List接口继承了Collection接口,并提供了更加丰富的方法:方法定义描述E set(int index, E element)修改指定下标元素E remove(int index)删除指定下标元素List subList(int fromIndex, int toIndex)获取指定下标区间的子列表List集合的特点:存放有序:按照放入List集合的顺序存放元素有下标:因为有序,可指定元素存放或获取的位置元素可重复:只要符合数据类型的数据都能添.
2021-02-22 17:54:49 109
原创 Java基础集合-Collection接口
Collection是单例集合高度抽象的顶级接口,其中定义了列单列集合的基本操作,它的子类都直接或间接实现了无参构造或参数为Collection的带参构造,带参Collection构造用来转换Collection的类型。Collection继承于Iterable接口,Iterable中提供了三中迭代方式:方法定义/实现描述Iterator iterator()队列迭代器default void forEach(Consumer<? super T> action
2021-02-22 17:53:31 740
原创 Java基础集合-总览
Java集合是一个庞大的体系,用来存储、操作大量数据,集合占据了java.util的半壁江山,下面只介绍常用一些集合类:如图,集合主要分四个大板块:Collection集合Map集合迭代器和枚举器工具类两大接口Collection和Map。Collection是单列集合,Map是双列集合,存储键值对元素。CollectionCollection是包含了集合的基本操作和属性的接口,主要有List和Set两大分支:List是一个有序(放入的顺序)、有下标、允许元素重复的集合;Set是
2021-02-22 17:51:47 114
原创 Java装箱拆箱及String转型分析
八大基本类型都有对应的包装类boolean-Boolean,char-Charanter,byte-Byte,short-Short,int-Integer,long-Long,float-Float,double-Double,但包装类中使用缓存机制的就只有Byte、Short、Integer、Long、Character。基本类型字面量基本类型定义的变量,其值都是字面量,大小可知,生命周期可知。由于栈的存取速度比堆快,效率高,所以字面量就直接被存放于栈中。装箱: 基本类型转换为包装类型,自动装箱是
2021-02-22 17:49:22 224
原创 Java Object类解析
在学过Java的面向对象后,我们都知道“万物皆对象”,Object是所有类的基类,所有类显式或隐式地继承于Object。下面是Java对Object类的描述:package java.lang;/** * Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, * including arrays, implem
2021-02-22 17:47:51 160
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人