多线程

同时进行多个事务,在Java中称为并发;并发完成的每一件事称为线程。
一个进程(程序)可以包含多个线程;在单线程中,程序代码按调用顺序依次往下执行。


实现线程的两种方式:java.lang.Thread类与java.lang.Runnable接口。

Thread类:
该类的一个实例对象代表一个线程。完成线程真正功能的方法放在run()方法中,编写run()方法后,通过调用start()方法就可以执行该线程。
 

实现Runnable接口:
继承Runnable接口,实现接口中的run方法;线程的具体执行写在run方法中。

线程的生命周期:一共有七种,分别为出生、就绪、运行、等待、休眠、阻塞和死亡。
出生:线程被创建时
就绪:执行start()方法后
运行:当执行了start()方法,并线程得到系统资源
等待:调用了wait()方法;必须调用notify()方法才能唤醒
休眠:调用了sleep()方法
阻塞:在运行状态下发出输入输出请求;等输入输出完毕再次进入到就绪状态
死亡:run()方法执行完毕

虽然多线程看起来像同时执行,但事实上在同一时间点上只有一个线程被执行,只是线程之间切换较快。

线程的加入:当某个线程使用join()方法加入到另外一个线程时,另外一个线程会等待该线程执行完毕后再继续执行。

线程的中断:线程因为使用了sleep()或wait()方法进入了就绪状态,可以使用Thread类中的interrupt()方法使线程离开run()方法,同时结束线程;但线程会抛出interruptedexception异常,用户可以在处理该异常时完成线程的中断业务处理。

线程的礼让:使用yield()方法表示线程礼让,它只是给当前正处于运行状态的线程一个提醒,告知它可以将资源让给其他线程,但这仅仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。

线程的优先级:每个线程都有自己的优先级,如果有多个线程处于就绪状态,系统会根据优先级来决定首先使哪个线程进入运行状态。默认情况下线程的优先级是Thread.NORM_PRIORITY(常数5);线程的优先级可以使用setPriority()方法调整,如果该方法设置的优先级不在1~10之内,将产生IllegalArgumentException异常。

线程同步机制:Java中同步机制使用synchronized关键字,同步机制可以有效地防止资源冲突。通常将共享资源的操作放在synchronized定义的区域内,这样当其他线程获取到这个锁时,必须等待锁被释放时才能进入该区域。

同步方法:在方法前面修饰synchronized关键字(public synchronized void doit(){});当某个对象调用了同步方法,该对象的其他同步方法必须等待该同步方法执行完毕才能被执行。必须将每个能访问共享资源的方法修饰为synchronized,否则就会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值