线程的方法

本文深入探讨了Java线程的管理与同步机制,包括如何终止线程、使用线程的同步方法(wait(), notify(), notifyAll())、解决生产者和消费者模式中的同步问题,以及如何使用Timer和TimerTask实现定时任务。详细解析了每种方法的原理与应用,旨在帮助开发者高效地管理和调度线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、  终止线程的方法

(1)          Interrupt()不会终止线程,知识设置终止标记。

(2)          如果interrupt返回的为true。则利用break()和return()来终止线程。

(3)          Interrupted检测interrupt是否标记终止,如果标记则返回为true,否则返回为false。

例:for(int i=0;i<5;i++){

       System.out.println("子线程"+i);

   try {

          Thread.sleep(3000);

  } catch (InterruptedException e) {

             // TODO Auto-generated catch block

       System.out.println("子线程被中断");

   System.out.println("子线程"+this.isInterrupted());

             return;//返回是真,结束线程。

          }

      }

2、 线程的同步方法

(1)     wait():被锁定的对象可以调用wait()方法,这将导致当前线程被阻塞并释放对象的互斥锁,即解除了wait()方法当前对象的锁定状态,其他的线程就有机会访问该对象。

(2)     notify():唤醒调用wait()方法后被阻塞的线程。每次运行该方法只能唤醒一个线程

(3)   notifyAll():唤醒所有调用wait()方法被阻塞的线程。

3、生产者和消费者 

(1)生产者执行一次,消费者执行一次

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

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

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

 解决上述问题错误问题的方法

(1)     是生产者和消费者达到同步:在两者上加上互斥锁,但是会出现死锁,则用wait()和notify()方法

(2)     在生产者和消费者之间建立一个渠道

4、 Time和Timer

(1)Timer类的实现类似脑中的功能,定时或每个一段时间出发一次线程。

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

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

(4)schedule()方法

public void schedule(TimerTask task,Date time):该方法的作用是在到达time指定的时间或已经超过该时间时执行线程task。

Date d = new Date(2009-1900,10-1,1,10,0,0);
t. schedule(task,d);

public void schedule(TimerTask task, Date firstTime, long period):

在时间到达firstTime开始,每隔period毫秒就启动一次task指定的线程,这种方式会重复启动线程。
Date d = new Date(2009-1900,10-1,1,10,0,0);
t. schedule(task,d,20000);

public void schedule(TimerTask task,long delay)在执行schedule方法delay毫秒以后启动线程task。
t.schedule(task,1000);//在执行该行启动代码1000毫秒后启动一次线程task

public void schedule(TimerTask task,long delay,long period):在执行schedule方法delay毫秒以后启动线程task,然后每隔period毫秒重复启动线程task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值