欢迎来到天天文库
浏览记录
ID:59413343
大小:276.00 KB
页数:9页
时间:2020-11-01
《每日练习:Java中的线程之线程间的通信教程.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、两个线程间的通信这是我们之前的线程。执行效果:谁抢到资源,谁运行~实现线程交替执行:这里主要用到了两个内容1)创建一个标记flag,让程序进行判断:当flag!=1时,print1进入等待,执行print2,然后让flag=1,唤醒正在等待·的线程,当flag!=0时,print2进入等待,执行print1,让后让flag=0,唤醒正在等待的线程。2)在object类中有wait()和notify()方法,可以对线程进行等待和唤醒的操作多个线程间的通信两个线程搞定了,那么再多一点呢?这个时候用notify()方法就不够了,这个方法只能唤醒单个的
2、线程,要用notifyAll,唤醒所有正在等待的线程,然后让他们自行匹配,谁满足条件谁就运行~注意:在同步代码块中,用哪个对象锁,就用那个对象调用wait()方法。sleep()和wait()方法的区别这两个方法的功能很像,但是还是有一点区别的~第一点:sleep()方法必须给一个参数,参数就是等待的时间,时间到了自动醒来。wait()方法也可以传入参数,程序在参数代表的时间结束后进入等待,不传参数表示程序直接进入等待。第二点:sleep()方法在同步代码块或同步函数中,不释放锁。wait()方法在同步代码块或同步函数中,释放锁。JDK1.5的
3、特性互斥锁ReentrantLock一个可重入的互斥锁Lock,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。这里面有一个newCondition()方法可以返回一个Condition实例。这个实例可以调用下面的方法,我们主要用到了圈起的两个方法~那么我们实现上面的功能的代码,就可以这样来写线程的生命周期就是一个线程的生命周期,小伙伴们看一下,学了一回线程,这个东西还是要了解一下的~图片自来网络线程组线程组概述Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管
4、理,Java允许程序直接对线程组进行控制。默认情况下,所有的线程都属于主线程组。getThreadGroup()通过线程对象获取他所属于的组getName()通过线程组对象获取他组的名字我们也可以给线程设置分组步骤如下:1)ThreadGroup(Stringname)创建线程组对象并给其赋值名字2)创建线程对象3)Thread(ThreadGroup,Runnable,name)4)设置整组的优先级或者守护线程代码演示:线程池程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,尤其是当程序中要创
5、建大量生存期很短的线程时,更应该考虑使用线程池。线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。(从JDK5开始,Java内置支持线程池)内置线程池的使用概述JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法newFixedThreadPool(intnThreads)newSingleThreadExecutor()这些方法的返回值是ExecutorService对象,该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法s
6、ubmit(Runnabletask)submit(Callabletask)使用步骤:1)创建线程池对象2)创建Runnable实例3)提交Runnable实例4)关闭线程池代码演示:
此文档下载收益归作者所有