
2018年蚂蚁课堂(每特教育)- Java工程师面试宝典-V1.0.docx
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
该文档为《Java工程师面试宝典》V1.0版,由蚂蚁课堂(每特教育)于2018年发布。内容涵盖Java工程师职位所需的技术知识与面试技巧。
Java 多线程编程基础知识
进程与线程的区别:进程是所有线程的集合,每一个线程是进程中的一条执行路径,而线程只是一条执行路径。
使用多线程的目的在于提高程序效率。
创建多线程的方式有两种:
1. 继承 Thread 类。
2. 实现 Runnable 接口。推荐实现接口是因为这样可以继续继承其他类。
多线程安全
当多个线程同时共享同一个全局变量或静态变量,并进行读写操作时,可能会发生数据冲突问题。
解决方法包括使用锁机制或者同步代码块来确保同一时间只有一个线程访问这些资源。
多线程同步
1. 使用 synchronized 修饰的代码段可以实现同步功能。
2. 同步函数是在方法上添加 synchronized 关键字的方法。
3. 静态同步函数则是指在静态方法上使用 synchronized 关键字修饰的方法,用于处理类级别的锁机制。
多线程死锁
当一个线程等待另一个正在被该线程持有的资源时会发生死锁。
避免这种问题的一种方式是尽量不嵌套使用同步代码块。
wait() 与 notify()
- wait(): 让当前执行的线程进入等待状态,通常在同步方法或同步代码块中调用。
- notify(): 唤醒一个正在等待的状态下的某个线程,同样需要在同步上下文中被调用。
wait() 和 sleep()
两者都使程序暂停运行一段时间。然而,sleep() 方法不会释放任何锁而只是让出CPU时间片;相反,wait() 会释放对象的锁定状态,并将当前执行的线程放入等待队列中直到其他线程通过 notify 或者 notifyAll 调用唤醒它。
Lock 与 Synchronized
- Lock 接口提供了一种更灵活的方式来实现多线程同步。
- synchronized 是 Java 内置的关键字,用于修饰方法或代码块以确保它们的原子性执行。
两者的主要区别在于 Lock 提供了更多的功能(如尝试获取锁、定时锁定等),而 Synchronized 则更为简单直接。
全部评论 (0)


