多线程重点难点解答

1、请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述
答案: 
        Lock
        public void lock() 加锁
        public void unlock() 解锁

        Object
        public final void wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。
        public final void notify() 唤醒在此对象监视器上等待的单个线程
        public final void notifyAll() 唤醒在此对象监视器上等待的所有线程

        Thread
        public final ThreadGroup getThreadGroup() 返回该线程所属的线程组

        Executors
        public static ExecutorService newCachedThreadPool() 创建一个具有缓冲功能的线程池
        
2、多线程有几种实现方案,分别是哪几种?
答案:
        有三种方式
        方式一:
                继承Thread类,重写run()方法
                                创建:
                                class Xxx extends Thread {
                                        public void run(){
                                                Thread.sleep(1000);
                }
                };
                开启线程:
                对象.start();
        方式二:
                实现Runnable接口,重写run()方法
                开启线程:
                Thread t = new Thread(对象);
                t.start();
        方式三:
                实现Callable接口,重写call()方法
                Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务
                        Callable和Runnable有几点不同:
                                1. Callable规定的方法是call(),而Runnable规定的方法是run()
                                2. Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
                                3. Call()方法可抛出异常,而run()方法是不能抛出异常的
                                4. 运行Callable任务可拿到一个Future对象,FuTure表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果,通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果
                
        
3、死锁是如何产生的? 如何解决死锁问题?
答案:
        产生死锁的必要条件
                1.互斥条件
                2.不可抢占条件
                3.占有且申请条件
                4.循环等待条件
        解决死锁问题
                
4、请描述什么是线程间的通信?
答案:
        线程间通信就是使线程间能够互相发送信号
        一般而言,在一个应用程序中(即进程),一个线程往往不是孤立存在的,常常需要和其他线程通信,以执行特定的任务。如主线程和次线程,次线程和次线程,工作线程和用户界面线程等。这样,线程与线程间必定有一个信息传递的渠道。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的

5、请描述什么是等待唤醒机制?
答案:
        所谓的等待唤醒机制其实就是wait()方法和notify()方法,使当前线程等待从而放弃执行资格和唤醒线程1、请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述

6、请解释sleep()和wait()方法的区别?
答案:
        sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了cpu,但其他被同步锁挡住了的线程也无法得到执行。
        wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其他线程调用了notify方法(notify并不释放锁,只是告诉调用过wait方法的线程可以去参与获得锁的竞争了,但不是马上得到锁,因为锁还在别人手里,别人还没释放。如果notify方法后面的代码还有很多,需要这些代码执行完后才会释放锁,可以在notfiy方法后增加一个等待和一些代码,看看效果),调用wait方法的线程就会解除wait状态和程序可以再次得到锁后继续向下运行
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值