2015_1_29_Thread线程

/*日志名格式  年_月_日_内容 如2015_1_19_面向对象*/

*******************************************************************************

日期:2015年1月 29日

主题:Thread线程

相关文件夹:oracle/相关课件/第11章_多线程.pptx

使用软件:Eclipse

*******************************************************************************

上午

*******************************************************************************

一、Thread类

l     构造方法

Ø  Thread():创建新的Thread对象

Ø  Thread(String threadname):创建线程并指定线程实例名

Ø  Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法

Ø  Thread(Runnable target, String name):创建新的Thread对象

1.              创建线程的两种方式

   继承Thread类

   实现Runnable接口

2.              实现Runnable接口的好处

         1)避免了单继承的局限性

         2)多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份  资源。

3.Thread类的有关方法

   void start():  启动线程,并执行对象的run()方法

run():  线程在被调度时执行的操作

String getName():  返回线程的名称

void setName(String name):设置该线程名称

static currentThread(): 返回当前线程

l     static  void yield():线程让步

Ø  暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程

Ø  若队列中没有同优先级的线程,忽略此方法

join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到join() 方法加入的join 线程执行完为止  

Ø  低优先级的线程也可以获得执行

static  void  sleep(long millis):(指定时间:毫秒)

Ø  令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。

Ø  抛出InterruptedException异常

stop(): 强制线程生命期结束

boolean isAlive():返回boolean,判断线程是否还活着

4.    多线程程序的优点:

         背景:只使用单个线程完成多个任务(调用多个方法),肯定比用多个线程来完成用的 时间更短,为何仍需多线程呢?

         多线程程序的优点:

  1. 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
  2. 提高计算机系统CPU的利用率
  3. 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和修改

二、线程的分类

Java中的线程分为两类:一种是守护线程,一种是用户线程

l  它们在几乎每个方面都是相同的,唯一的区别是判断JVM何时离开。

l  守护线程是用来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用户线程变成一个守护线程。

l  Java垃圾回收就是一个典型的守护线程。

l  若JVM中都是守护线程,当前JVM将退出。

*******************************************************************************

下午

*******************************************************************************

一、互斥锁

   在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。

Ø  每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

Ø  关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。

Ø  同步的局限性:导致程序的执行效率要降低

Ø  同步方法(非静态的)的锁为this。

Ø  同步方法(静态的)的锁为当前类本身。

 

二、         线程通信

l     wait() 与 notify() 和 notifyAll()

Ø  wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队等候再次对资源的访问

Ø  notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待

Ø  notifyAll ():唤醒正在排队等待资源的所有线程结束等待.

l  Java.lang.Object提供的这三个方法只有在synchronized方法或synchronized代码块中才能使用,否则会报java.lang.IllegalMonitorStateException异常

注:相关例子请查看博客中的Java模拟生产者消费者问题一文。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值