java面试
2021-02-19 15:20
标签:关系 thread 唤醒 运行 java 两种 unp 依赖 消息 多线程并发编程时,难免会遇到线程间的通信问题。线程通信方式的思想大体上来说可以分为两种:共享和传递。 共享的实现方式可以是共享变量、共享文件、数据库、网络等。传递的实现方式可以是消息队列、生产者-消费者模型等。 (1)共享变量: 使用volatile 关键字定义共享变量 private static volatile Boolean odd = true。 多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。 volatile 保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新。 (2)使用Object类的wait() 和 notify() 方法: wait和 notify必须配合synchronized使用,wait方法释放锁,notify方法不释放锁。 (3)基本LockSupport实现线程间的阻塞和唤醒: LockSupport.park(); 阻塞 LockSupport.unpark(threadB); 唤醒 (1)继承Thread类创建线程。 (2)实现Runnable接口创建线程。 多,多实现单继承。 (3)java的Executors线程池。减少对象创建, 提供定时执行、定期执行、单线程、并发数控制等功能。 创建线程需要花费资源和时间,如果等任务来创建线程那么响应时间就变长。 在程序启动时创建线程来响应处理就是线程池。 start():Thread类start()来启动一个线程,这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行。 run()称为线程体,它包含了要执行的这个线程的内容。 run(): run()方法当作普通方法的方式调用,程序还是要顺序执行。没有达到多线程目的。 (1)wait是Object方法,sleep是线程方法。 (2)wait会释放锁,sleep不释放锁。 (3)wait需要依赖synchronized关键字,sleep方法不依赖于同步器synchronized。 不同类的对象对同一消息作出不同的响应就叫做多态。 多态存在的三个条件: (1)有继承关系。 (2)子类重写父类方法。 (3)父类引用指向子类对象,父类调用方法会调用子类重写后方法。FU fu=new ZI(); (1)final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 (2)final方法不能被子类的方法重写,但可以被继承。 (3)final类不能被继承,没有子类,final类中的方法默认是final的。 (4)final不能用于修饰构造方法。 (1)静态变量。类加载只为分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问。 (2)静态方法。静态方法可以直接通过类名调用。静态方法不能访问非静态方法。 (3)static代码块。类加载的时候就会依次执行一次静态代码块。 java面试 标签:关系 thread 唤醒 运行 java 两种 unp 依赖 消息 原文地址:https://www.cnblogs.com/chong-zuo3322/p/12684741.html1.java多线程
1.1--java多线程通信?
1.2--java多线程实现方式?
1.4--java什么是线程池?
1.5--java多线程start()与run()方法区别?
1.6--java多线程中wait()与sleep()区别?
2.java基础
1.1--java多态?
1.2--java中final关键字?
1.3--java中static关键字?