摘要:
注解:Annotation,也是一种引用数据类型。编译之后生成class文件。 语法: [修饰符列表] @interface 注解名{ 属性(可有可无) } IDEAZ中可直接生成Annotation: package com.dh.annotation; public @interface MyA 阅读全文
摘要:
获取到Class对象之后,就可以利用Class对象获取和操作类的属性、构造器、方法、父类和接口了。 所有的方法都可以查java.lang.Class的api文档。 以下逐一介绍: 1.属性 通过Class对象获取类的属性: //获取所有公共的属性 Field[] getFields(); //获取所 阅读全文
摘要:
1.反射的作用是什么? 通过反射机制可以操作字节码文件。 相关类: java.lang.Class:字节码文件类; java.lang.reflect.Field:属性字节码类; java.lang.reflect.Constructor:构造方法字节码; java.lang.reflect.Met 阅读全文
摘要:
Object中有两个涉及到了线程的方法: void wait():让当前线程进入等待状态,直到被唤醒;(会释放锁) void notify():唤醒当前正在等待的线程。(只会通知,不会释放锁) 因为Object是所有类的鼻祖,所以每一个对象都拥有wait()和notify()。 生产者和消费者模型 阅读全文
摘要:
之前介绍了两种实现多线程的方式:继承Thread类和实现Runnable接口。但是这两种方式的线程都不能返回一个返回值,因为run()没有返回值。 但是有时候我们委派一个线程去执行一个任务,我们希望这个线程可以返回该任务的执行结果。 JDK8中推出了一种新的实现多线程的方式:实现Callable接口 阅读全文
摘要:
Java中又两种线程: 用户线程:普通的线程; 守护线程:又可叫做后台线程,如垃圾回收线程。一般是死循环执行,等到所有的用户线程结束,守护线程就结束。 如:我们需要每天的00:00就进行数据的备份,这个时候我们就需要一个定时器线程,并且将该定时器线程设置为守护线程。 1.守护线程 守护线程是一直执行 阅读全文
摘要:
对锁的使用不恰当时,很容易会造成死锁,死锁不会报异常,只是程序一直不停止,很难调试,最好不要写出死锁的代码。 比如: A占有了R1资源,但是需要R2资源,B占有了R2资源,但是需要R1资源,A、B此时就会一直陷入等待中...... 死锁代码 面试你就有可能遇到让你手写一个死锁代码的题目! 因为只有你 阅读全文
摘要:
分析以下四个程序:判断t2线程是否需要等待t1线程执行完毕再执行? (1) package com.dh.threadsafe3; public class SynchronizedTest { public static void main(String[] args) { Do d = new 阅读全文
摘要:
项目最后是发布运行在服务器上的,服务器已经实现了多线程,所以我们在编写程序时需要关注的其实是项目中的数据在多线程并发环境下的安全问题。 先来看一个例子:(只是例子,忽略生活) A和B同时去操作一个余额为1w的银行账户,A先去ATM机中取1w,然后这个时候发生了网络延迟,银行账户没有更新现在的余额为0 阅读全文
摘要:
1.线程生命周期 线程的生命周期有五个: 新建状态 就绪状态(可运行状态) 运行状态 阻塞状态 死亡状态 图解: 2.线程常用方法 线程有哪些方法可以查看api文档中的Thread类,以下只列举常用的。 (1)线程名字相关方法 void setName(String name):设置线程的名字(不设 阅读全文