.线程同步通信与定时器Timer使用

 

    20110907                .线程同步通信与定时器Timer使用

一、     wait()方法。 是用临界资源对象调用他,功能:使当前线程阻塞,同时释放对临界资源加的互斥锁。

Notify()方法  用同一个临界资源将此线程进入到就绪状态

notifyAll()方法  还是用同以哥临界资源调用,将所有等待的线程都唤醒

二、     消费者和生产者

a)       出现问题

                       i.              线程B写一次,线程A读一次

                     ii.              在某个时候线程B运行速度比较快,在线程A未读取上一个数据之前,B就写了第二次数据,造成数据遗漏。

                  iii.              在某个时候线程A运行速度比较快,它读完一次数据之后,线程B还没来得及写,线程A又来读第二次。结果线程A读不到数据,导致运行出错。

b)      线程B正在写数据时,线程A也来读取数据,这时可能线程B还没将数据写完,线程A将数据读走,导致程序出错。

c)       解决方法

                       i.              一种是采用某种机制保持生产者和消费者之间的同步

                     ii.              一种是在生产者和消费者之间建立一个管道

d)      示例代码:

Public synchronized void pus(char ch){

       While(index==data.length){  //while 防止挂起失败。

              Try{

                            This.wait();     //挂起当前线程并解锁。使此线程进入阻塞状态

              }catch(InterruptedException ex){

                     Systen.out.println(ex.toString());          

}

                }

                            This.notify();   //唤醒线程,将此进程进入就绪状态

                            Data[index]=ch;

                            Index++;

                            System.out.println(“produced:”+ch);

}

Public synchronized char pop(){

       While(index==0){

              Try{

                     This.wait();

}cathch(InterruptedExceotuin e){

                     e.printStackTrace();

              }

              This.notify();

              Index--;

              System.out.println(“custom:”+data[index]);

              Return data[index];

}

}

三、     定时器 Timer和TimerTask

a)       Timer类实现的是累死闹钟的功能,也就是定时或者每隔一定时间间隔触发一次线程。

b)      TimerTask类是一个抽象类,该类实现了Runnable接口,具备多线程的能力。

c)       通过继承TimerTask类创建子类,使该子类获得多线程的能力,将需要多线程执行的代码书写在run方法的内部。

d)      特殊方法schedule(task,毫秒);   后参数可为毫秒或者data对象

Schedule(task,0,1000) 每过1秒马上执行任务task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值