线程相关 Java多线程实现方式 继承Thread,实现Runnable接口,实现Callable接口(能抛异常且有返回值,不常用) 为什么有了继承Thread方式还要有Runnable接口方式 实现接口的方式适合多个相同程序代码的线程去处理同一个资源,可以避免Java中单继承的限制 为什么JVM启动是多线程的? 因为至少启动了两个线程:主线程.垃圾回收线程 线程和进程的含义 进程:是操作系统资源分配的基本单位,正在运行的程序 线程:是任务调度和执行的基本单位,程序使用CPU的最基本单位 多线程…
集合相关 List.Set.Map的区别 类型 描述 List 允许重复对象,可插入多个null元素,有序 Set 不允许重复对象,只允许一个null元素,无序 Map 不是collection的子接口或实现类,是一个接口,每个元素都是entry,一个键一个值 Vector.ArrayList.LinkedList的区别 类型 描述 Vector 动态数组,安全,扩容提高1倍 ArrayList 动态数组,不安全,扩容增加50%,初始容量10 LinkedList 双向链表,不安全,不需要调整容…
Java高级 类加载过程 加载(创建class对象) -> 连接(验证-准备-解析) -> 类初始化 类加载器类别 根类加载器:加载java核心类 扩展类加载器:加载JRE目录中的jar包 系统类加载器:加载用户自定义类和classpath下的jar包 Java反射机制基于什么原理 通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义 动态代理基于什么原理 方便运行时动态构建代理.动态处理代理方法调用的机制 动态代…
Java基础 Java如何运行的? 开发的java源代码,通过javac编译成为平台无关的字节码文件(class),然后通过JVM的解释器将字节码解释成对应的机器码 “一次编译,到处运行”的理解 说的是java的跨平台特性,与JVM密不可分,不同环境和平台安装好JDK就有java运行环境,并不是说java是跨平台语言:到处运行的关键和前提是JVM,在可以运行JVM的地方都内含着一个JVM操作系统,从而使Java提供了各种不同平台上的虚拟机制,因此实现了到处运行的效果 JDK.JRE.JVM的区别…
Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语言的关键之一就是学好语法规则,写作合乎语法规则的语句,控制计算机完成各种任务.而按编程语言的语法规则写成的,完成某项功能的代码集合就可以叫做程序.    一.初识对象(Object) “初识对象的时候我们还不知道什么是对象.” Java的一个重要特点就是面向对象(Object Oriented), …
1.线程和进程的概念.并行和并发的概念…
一个优秀的软件不会随意的创建.销毁线程,因为创建和销毁线程需要耗费大量的CPU时间以及需要和内存做出大量的交互.因此JDK5提出了使用线程池,让程序员把更多的精力放在业务逻辑上面,弱化对线程的开闭管理. JDK提供了四种不同的线程池给程序员使用 首先使用线程池,需要用到ExecutorService接口,该接口有个抽象类AbstractExecutorService对其进行了实现,ThreadPoolExecutor进一步对抽象类进行了实现.最后JDK封装了一个Executor类对ThreadP…
一.从原子操作开始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始). 很多情况下我们只是需要一个简单的.高效的.线程安全的递增递减方案.注意,这里有三个条件: 简单,意味着程序员尽可能少的操作底层或者实现起来要比较容易: 高效意味着耗用资源要少,程序处理速度要快: 线程安全也非常重要,这个在多线程下能保证数据的正确性. 这三个条件看起来比较简单,但是实现起来却难以令人满意. 通…
1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方法要捕捉异常. 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完毕后,低优先级的线程才能够执行:但是高优先级的线程sleep(500)后,低优先级就有机会执行了. 总…
1.继承Thread public class TestThread extends Thread{ public void run(){ System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { Thread t = new TestThread(); t.start(); } } 2.实现Runnable public class TestRunnable…