JAVA自学笔记(1)

    xiaoxiao2021-03-25  120

         1.线程间的通信

           (1)前提,必须要有同步监视器,即synchronized关键字修饰代码块或方法

              wait()导致当前线程等待

              notify()唤醒在此同步监视器上等待的单个线程

              notifyAll()唤醒唤醒在此同步监视器上等待的全部线程

           (2)Lock代替同步方法或同步代码块,Condition代替了同步监视器的功能

              await()导致当前线程等待

              singal()唤醒在此同步监视器上等待的单个线程

              singalAll()唤醒唤醒在此同步监视器上等待的全部线程

               private  final  Lock lock = new ReentrantLock();

                private  final  Condition cond = lock.newCondition();

                .....

               lock.lock();

               try{

                   ......

                   cond.await();

                   ......

                   cond.singalAll();

                   .......

                finally{

                    lock.unlock();

                 }

       

             (3)使用阻塞队列(BlockingQueue)控制线程通信

               如果BlockingQueue队列已满或已空,则线程进入阻塞状态

               put(E  e):把E元素放入BlockingQueue中尾部(支持阻塞)

               add(E  e):把E元素放入BlockingQueue中尾部

               offer(E  e):把E元素放入BlockingQueue中尾部

               take():BlockingQueue头部取出元素(支持阻塞)

               remove(E  e):BlockingQueue头部取出元素

               poll(E  e):BlockingQueue头部取出元素

               

                element():在队列头部取出但不删除元素,当队列为空,抛出异常

                peek():在队列头部取出但不删除元素,当队列为空,抛出异常

           2.线程分组

             Thread(ThreadGroup group,Runnable target):以target的run()方法作为线程执行体创建新线程

             Thread(ThreadGroup group,Runnable target,String name):  以target的run()方法作为线程执行体创建新线程,       该线程属于Group线程组,且线程名为name

              Thread(ThreadGroup group,String name):创建新线程,新线程名为name,属于group组

              ThreadGroup(String name):以指定的线程组名字来创建新线程组

              ThreadGroup(ThreadGroup parent,String name): 以指定的名字,指定的父线程组来创建一个新线程组 

                 setThreadGroup():  改变线程所属的组

                 getThreadGroup():  获取线程所属的组

                一旦创建了线程组,不允许改变线程组的名字。可以通过getName()获取名字

                操作线程组里的线程

                int activeCount():返回此线程组中活动线程的数目

                interrupt():中断此线程组中所有线程

                isDaemon():判断该线程组是否是后台线程组

                setDaemon(boolean daemon):把该线程组设置为后台线程组

                setMaxPriority(int pri):设置线程组的优先级

               线程组内在发生异常是,JVM会首先查找该异常对应的异常处理器,来处理异常

                                                      否则,调用该线程组所属的线程对象的uncaughtException()方法处理异常

               可以通过[static] setDefaultUncaughtException(Thread.UncaughtExceptionHandler  en)设置默认线程组为默认            的异常处理器

             

           3.线程池

             http://zhangjunhd.blog.51cto.com/113473/70068/

             

             Executors类

             ForkJoinPool

             ThreadLocal类

             

    转载请注明原文地址: https://ju.6miu.com/read-6487.html

    最新回复(0)