问题一:wait和sleep方法有什么区别?
wait和sleep方法有什么区别?
参考回答:
主要区别在于:
wait方法必须在synchronized保护的代码中使用,而sleep方法没有此要求。
wait方法会主动释放monitor锁,而sleep方法在执行时并不会释放monitor锁。
wait方法意味着永久等待,直到被中断或被唤醒,而sleep方法会定义一个时间,时间到期后线程会主动恢复执行。
wait/notify是Object类的方法,而sleep是Thread类的方法。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633959
问题二:创建线程的方式有哪些?
创建线程的方式有哪些?
参考回答:
创建线程的方式有四种:
1. 实现Runnable接口(优先使用):通过创建一个实现Runnable接口的类,并重写run()方法,然后创建一个Thread对象并将Runnable对象作为参数传入。
public class RunnableThread implements Runnable {
@Override
public void run() {
System.out.println('用实现Runnable接口实现线程');
}
}
2. 实现Callable接口(有返回值可抛出异常):类似于Runnable接口,但Callable接口的call()方法有返回值并且可以抛出异常。
3. 继承Thread类(Java不支持多继承):通过创建一个继承Thread类的子类,并重写run()方法。
public class ExtendsThread extends Thread {
@Override
public void run() {
System.out.println('用Thread类实现线程');
}
}
4. 使用线程池:线程池可以管理和复用线程,底层都是通过实现Runnable接口的run()方法。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633960
问题三:线程池中的线程是如何创建的?
线程池中的线程是如何创建的?
参考回答:
线程池中的线程通常是通过实现ThreadFactory接口来创建的。ThreadFactory接口定义了一个方法newThread(Runnable r),该方法接受一个Runnable对象作为参数,并返回一个新的Thread对象。线程池内部使用这个ThreadFactory来创建新的线程。例如,在提供的代码中,DefaultThreadFactory类实现了ThreadFactory接口,并在newThread()方法中创建并返回一个新的Thread对象。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633961
问题四:线程池有哪些优点?
线程池有哪些优点?
参考回答:
线程池通过复用已创建的线程,降低资源损耗;线程可以直接处理队列中的任务,加快响应速度;同时线程池便于统一监控和管理。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633962
问题五:线程池构造函数包含哪些参数?
线程池构造函数包含哪些参数?
参考回答:
线程池构造函数包含七大参数,分别是:corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(线程空闲时间)、TimeUnit(时间单位)、workQueue(任务队列)、threadFactory(线程工厂)、handler(拒绝策略处理器)。
关于本问题的更多回答可点击原文查看: