网站建设运维自查问题清单,wordpress实现用户中心,以下哪些不属于h5制作软件,企业做网站1、java 中有几种方法可以实现一个线程
继承 Thread 类实现 Runnable 接口实现 Callable 接口#xff0c;需要实现的是 call() 方法
2、如何停止一个正在运行的线程
使用共享变量的方式
在这种方式中#xff0c;之所以引入共享变量#xff0c;是因为该变量可以被多个执行…1、java 中有几种方法可以实现一个线程
继承 Thread 类实现 Runnable 接口实现 Callable 接口需要实现的是 call() 方法
2、如何停止一个正在运行的线程
使用共享变量的方式
在这种方式中之所以引入共享变量是因为该变量可以被多个执行相同任务的线程用来作为是否中断的信号通知中断线程的执行
使用 interrupt 方法终止线程
如果一个线程由于等待某些事件的发生而被阻塞又该怎样停止该线程呢这种情况经常会发生比如当一个线程由于需要等候键盘输入而被阻塞或者调用Thread.join()方法或者 Thread.sleep()方法在网络中调用ServerSocket.accept()方法或者调用了 DatagramSocket.receive()方法时都有可能导致线程阻塞使线程处于处于不可运行状态时即使主程序中将该线程的共享变量设置为 true但该线程此时根本无法检查循环标志当然也就无法立即中断。这里我们给出的建议是不要使用 stop()方法而是使用 Thread 提供的interrupt()方法因为该方法虽然不会中断一个正在运行的线程但是它可以使一个被阻塞的线程抛出一个中断异常从而使线程提前结束阻塞状态退出堵塞代码。
3、notify()和 notifyAll()有什么区别
当一个线程进入 wait 之后就必须等其他线程 notify/notifyall,使用 notifyall,可以唤醒所有处于 wait 状态的线程使其重新进入锁的争夺队列中而 notify 只能唤醒一个。
如果没把握建议 notifyAll防止 notigy 因为信号丢失而造成程序异常。
4、什么是 Daemon 线程它有什么意义
所谓后台(daemon)线程是指在程序运行的时候在后台提供一种通用服务的线程并且这个线程并不属于程序中不可或缺的部分。因此当所有的非后台线程结束时程序也就终止了同时会杀死进程中的所有后台线程。反过来说只要有任何非后台线程还在运行程序就不会终止。必须在线程启动之前调用setDaemon()方法才能把它设置为后台线程。注意后台进程在不执行 finally子句的情况下就会终止其 run()方法。
比如JVM 的垃圾回收线程就是 Daemon 线程Finalizer 也是守护线程。
5、什么是可重入锁ReentrantLock
举例来说明锁的可重入性
public class UnReentrant{Lock lock new Lock();public void outer(){lock.lock();inner();lock.unlock();}public void inner(){lock.lock();//do somethinglock.unlock();}
}outer 中调用了 innerouter 先锁住了 lock这样 inner 就不能再获取 lock。其实调用 outer 的线程已经获取了 lock 锁但是不能在 inner 中重复利用已经获取的锁资源这种锁即称之为 不可重入可重入就意味着线程可以进入任何一个它已经拥有的锁所同步着的代码块。
synchronized、ReentrantLock 都是可重入的锁可重入锁相对来说简化了并发编程的开发。