1,并行并发有什么区别?
①并行是指两个或多个事件在同一时刻发生,而并发是指两个或多个事件在同一时间间隔发生
②并行没有对CPU资源的抢占;并发执行的线程需要对CPU资源进行抢占
2,sleep()和wait()有什么区别?
①sleep是Thread类的静态本地方法;wait是Object类的成员本地方法
②sleep方法可以在任何地方使用;wait方法则只能在同步代码块中使用。否则抛出异常
③sleep会休眠当前线程指定时间,释放CPU资源,但不释放对象锁;wait方法放弃持有的对象锁,进入等待队列
3,线程有哪些状态
创建状态:在生成线程对象,并没有调用该对象的start方法,至就绪线程处于创建状态
就绪状态:当调用了线程对象的start方法之后,该线程就进入了就绪状态
运行状态:线程调度程序将处于就绪状态的线程设置为当前线程
阻塞状态:线程正在运行的时候,被暂停
死亡状态:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡
4,run()和start()有什么区别?
start方法来启动一个线程,真正实现了多线程运行 ;run方法是在本线程里的,只是线程里的一个函数,而不是多线程。
5,什么是死锁?
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象
6,synchronized和Lock有什么区别
①,实现层面不一样,synchronized是java关键字,JVM层面实现加锁和释放锁;Lock不会自动释放锁
②,synchronized在线程代码执行完或出现异常时自动释放锁,Lock你会自动释放锁
7,同步和异步有何不同,分别在什么情况下使用?
同步:发送一个请求,等待返回,然后发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求
使用场景:
①,如果数据存在线程的共享,或竞态条件,需要同步。如多个线程同时对同一个变量进行读和写的操作
②,当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就可以使用异步,提高效率,加快程序的 响应。