• getClass()

    返回是的此object运行时的类,返回的对象是被object锁定的对象,调用这个方法不需要进行强转

    public static void main(String[]args){
    
            @Data
    class Demo{
    private Integer age;
    private String name;
    }
    Demo demo = new Demo();
    Class c = demo.getClass();
    //获取类的名称
    System.out.println("类的名称----"+c.getName());
    //方法的对象 类中的一个方法就是一个对象(可以获取方法的名称,获取方法的参数类型,获取方法的 返回类型)
    Method[]methods = c.getMethods();
    for (int i = 0; i < methods.length; i++) {
    System.out.println("方法的名称------" + methods[i].getName());
    System.out.println("方法的返回类型------" + methods[i].getReturnType());
    Class[] params = methods[i].getParameterTypes();
    for (int j = 0; j < params.length; j++) {
    System.out.println("方法的参数类型------" + params[j]);
    }
    }
    }
  • hashCode()

    这个方法返回该对象的哈希码值,支持这个方法主要是为了提升哈希表的性能如(java.util.HashMap),这个方法返回类型为一个Integer类型;同一个对象调用多次这个方法返回的hashCode值一定会相同;如果两个对象调用equals方法比较返回true,那么这个对象的hashCode值一定相等;如果两个对象调用equals方法返回为false那么这个对象的hashCode值一定不相同.

       public static void main(String[] args) {
    
            @Data
    class Demo {
    private Integer age;
    private String name;
    }
    //hashCode()方法
    Demo d = new Demo();
    d.setName("张三");
    d.setAge(12);
    Demo d1 = new Demo();
    d1.setName("李四");
    d1.setAge(12); //获取对象的hashCode值
    Integer hashCode = d.hashCode();
    System.out.println("张三的hashCode值为---------" + hashCode); //两个对象的hashCode值(两个对象不相等)
    System.out.println(d.equals(d1));
    System.out.println(d.hashCode() + "-------------" + d1.hashCode()); //两个对象的hashCode值(两个对象相等)
    d1.setName("张三");
    System.out.println(d.equals(d1));
    System.out.println(d.hashCode() + "-------------" + d1.hashCode()); }
  • equals

    这个方法主要比较其他对象和此对象是否相等,返回类型为布尔型对于非空对象主要有:

    (1)如果同一个对象调用equals方法,返回true

    (2)如果obj.equals(obj2)返回的是true,那么obj2.equals(obj)也返回true,也称为equals方法的对称性

    (3)equals方法的传递性,如果x.equals(y)和y.equals(z)都返回true,那么x.equals(z)也一定返回true

    (4)equals方法的一致性,如果x.equals(y)返回true或者false,那么不管多少次调用都应该返回相同的结果

    (5)对于任何非空的对象,x.equals(null),都返回false

    (6)如果x.equals(y)返回true,只有x和y引用同一个对象,那么x==y返回true

    (7)如果两个对象调用equals方法返回true,那么这两个对象的hashCode值一定相同

  • toString

    一般我们构建实体的时候重写此方法,如果不进行重写,那么默认返回"getClass().getName() + '@' + Integer.toHexString(hashCode())"

  • notify()

    主要唤醒在这个对象上等待的单个线程,选择哪个线程是随机的,线程等待的对象是通过调用wait方法监控的对象,被唤醒的对象会释放当前对象上的锁;

    被唤醒的线程只能是当前对象监视管理的线程,那么对线程的监视管理有三种方式:

    (1)通过执行该对象的同步实例方法

    (2)加synchronized

    (3)执行该类的同步静态方法

    每个线程只能有一个对象监视管理

  • notifyAll()

    唤醒正在此对象监视器上等待的所有线程,详见notify方法

  • wait(long)/wait(long,int)/wait()

    使当前线程等待,知道其他线程调用notify()或者notifyAll()或者已经超时才会唤醒,当前线程必须是在当前的对象的监视管理中;

  notify()/notifyAll()/wait():示例代码

  

/**
* @title: ThreadDemo
* @projectName umBasic
* @description: TODO
* @author wh
* @date 2019/7/617:58
*/
package com.um.test; public class ThreadDemo { public static void main(String[]args){
Goods goods = new Goods();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try{
goods.product();
}catch (Exception e){
e.printStackTrace();
}
}
}); Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try{
goods.customer();
}catch (Exception e){
e.printStackTrace();
}
}
}); Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
try{
goods.customer();
}catch (Exception e){
e.printStackTrace();
}
}
});
t1.start();
t2.start();
t3.start();
} } class Goods{
private static Integer Max_COUNT=10; Integer goodsNum = 0;
public synchronized void product() throws InterruptedException{
while (true){
System.out.println(Thread.currentThread().getName()+"product"+goodsNum);
Thread.sleep(10);
if(goodsNum>Max_COUNT){
System.out.println("数量超出无需生产");
wait();
}else{
goodsNum++;
}
notifyAll();
}
} public synchronized void customer() throws InterruptedException{
while (true){
System.out.println(Thread.currentThread().getName()+"product"+goodsNum);
Thread.sleep(10);
if(goodsNum<=0){
System.out.println("数量不够");
wait();
}else{
goodsNum--;
}
notifyAll();
}
} }

最新文章

  1. webform:图片水印、验证码制作
  2. WPF-系统托盘
  3. 【C解毒】缘木求鱼
  4. FreeBSD_11-系统管理——{Part_9 - SubVersion}
  5. jquery基本选择器标签名选择器
  6. JS_工厂模式
  7. 将mysql的查询结果导出为csv
  8. 跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)
  9. mysql开启外联方法
  10. spoj 390
  11. 可编辑tab选项卡
  12. IE浏览器下a标签嵌套img标签默认带有边框
  13. 过程化开发2048智力游戏WebApp
  14. JS脚本加载与执行对性能的影响
  15. 201521044091 java 第一周总结
  16. [Swift]LeetCode1007. 行相等的最少多米诺旋转 | Minimum Domino Rotations For Equal Row
  17. PhpStorm 常用插件
  18. Centos启动流程及grub legacy
  19. 元组(tuple)基本操作
  20. html select options &amp; vue h render

热门文章

  1. WPF 实现测量显示文本长度
  2. ios 拿到第一响应者的当前视图
  3. 食谱API自由和开放接口-为了发展自己的健康厨房APP应用
  4. 关于JSON 字段数据的直接查询
  5. 在 Excel 中如何使用宏示例删除列表中的重复项
  6. DJango xadmin 表头和标底设置,显示隐藏和显示
  7. 初探WINDOWS下IME编程
  8. PMC另类阐述
  9. mfc开发an unsupported operation was attempted错误解决
  10. 算法之--回溯法-迷宫问题【python实现】