JAVA传统线程技术

传统线程技术回顾1.创建线程java中线程的创建可以有两种方法:1、继承Thread类 2、实现Runnable接口继承Thread类创建线程的方法, 在继承了Thread类之后,不能再继承其他的方法。使用实现Runnable接口来创建线程容易达到资源共享!两种方式都要调用Thread对象的run方法,如果Thread类的run方法没有被覆盖,并且为该Thread对象设置了一个Runnable对象,该run方法会调用Runnable对象的run方法。2.JAVA计时器定时器类Timer在java.util包中,timer.schedule(task, firstTime, period)。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。cancel()方法结束这个定时器。schedule(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定延迟peroid的执行,不会把过去的时间算上。如果指定开始执行的时间在当前系统运行时间之前,schedule先实例化,然后使用实例的schedule方法。scheduleAtFixedRate(TimerTask task, long delay, long period)方法设定指定任务task在指定延迟delay后进行固定频率peroid的执行,会把已经过去的时间也作为周期执行。3.传统多线程互斥和同步技术及同步通信技术多线程互斥通过 Private 关键字来保证数据对象只能被方法访问,只需针对方法提出一套机制,这套机制就是 synchronized 关键字。同步synchronized关键字对共享对象的操作上锁。 在当前线程调用这个方法时,此方法是被锁状态,非静态同步方法所代表监视区域的关联对象是 this,静态同步方法所代表监视区域的关联对象是当前类的 Class 实例。运行init()方法需要调用内部类的实例对象TraditionalThreadSynchronized对象。多线程线程同步及同步通信3个方法分别是:wait()、notify()和notifyAll()。这三种方法执行的前提是执行线程手中有obj的锁。wait(long timeout)把现在的线程放到obj的wait set,将使得执行该方法的线程对象被阻塞,Thread类的sleep方法和Object类的wait方法,均可以用于将线程的状态由运行状态转为不可运行状态,二者在等待时间上是有区别的,sleep()方法的等待时间是确定的,到时由系统唤醒,而wait方法的等待时间是不确定的,需要由线程通过notify()/notifyAll()方法来唤醒。(注意避免循环等待,否则会死的很难堪@@)  
原文地址:https://www.cnblogs.com/bjanzhuo/p/3575915.html