Java中的多线程浅析(1)
来源:互联网 发布:怪物猎人4g手机数据库 编辑:程序博客网 时间:2024/06/01 22:27
Java中的多线程浅析(1)
1. 让多个程序片段呈现出同时执行的效果,就是多线程。多线程不一定是真实的同时执行。
2. Java中如果要代码片段能在多线程中执行,有几种种办法:
<1> 实现Runnable接口。Runnable接口中只有一个方法run()。
<2> 重写Thead的run()方法。
<?>使用Callable接口。以后再说吧
3. 怎样开启一个线程,针对上面的两种实现方式,分别举例:
<1>
class theadTest implements Runnable
{ …
@override@
Public void run()
{
//新线程中执行代码
}
}
使用新线程执行上面的代码:
Public Static void Main()
{
Thead_newThead =new Thead(new theadTest();
newThead.start();
}
<2>
class theadTest extends Thead
{ …
@override@
Public void run()
{
//新线程中执行代码
}
}
使用新线程执行上面的代码:
Public Static void Main()
{
theadTest _newThead=new theadTest();
newThead.start();
}
4. 新启动的线程在run()方法执行结束后自动消亡。
5. 新启动的线程不一定会顺利执行,它有可能处于执行、阻塞、就绪等状态。
6. 正在执行的线程是执行状态。
7. 因为缺少执行资源的支持,比如,无法获得I/O设备,其他线程正在执行本线程需要的互斥代码等而导致本线程无法执行,则本线程处于阻塞状态。
8. 什么都准备好了,立马能执行。但是由于线程调度原因,系统未执行当前线程(未获得CPU资源),则线程处于就绪状态。
9. 线程状态可相互转变。
10. 多线程中的代码片段不再保证原子执行。比如:
线程1中执行
this.a=变量(假设此时变量值为2);
Intb=a;
如果有线程2也运行这段代码:
this.a=变量(假设此时变量值为3);
Intb=a;
则无法保证线程1中的b值为2还是为3。原因是,无法保证this.a=变量(=时变量值为2);执行完以后执行了Int b=a;还是执行了this.a=变量(变量值为3);
11. 如果要对上面程序结果可控,必须对多线程代码段进行同步。Java中同步可用两种方法:对象锁和synchronized来控制。
12. 对象锁方法: 每个对象都一个锁,每个锁只能由一个线程获得。当一个线程顺利获得了一个锁,则该线程的代码就可顺利执行下去,而且在锁的保护下,执行过过程绝无其他线程打扰。如果获得不到锁,则代码阻塞在此,直至获得锁再执行。在Java中,ReentrantLock对象的锁可直接控制程序。假设obj为ReentrantLock对象,其控制程序的方法为:
Obj.lock() //代码执行到这里,程序试图获得obj的对象锁,如果获取不到,则阻塞在这里等着。如果获取到,则继续执行
受保护的代码段;//在这里执行的代码,保证无其他线程同时执行。
Obj.unlock //释放掉对obj锁的控制,让其他线程执行。
13. 可使用synchronized关键字对其他对象的锁进行控制,其方法为:
Synchronized(其他的对象obj)//在这里,程序试图获得obj对象的锁。这里,obj可以是任何对象,不局限于ReentrantLock对象
{
//受保护的代码
}//执行出代码段,则自动释放了该对象的锁
14. 可用Synchronized修饰类的函数成员,这时,Synchronized控制的是this所代表的对象的锁。
- Java中的多线程浅析(1)
- 浅析Java多线程编程中的高级技术
- 多线程浅析(1)
- java中的多线程(1)
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- JAVA 的多线程浅析
- java多线程性能浅析
- java 多线程 实例浅析
- java多线程性能浅析
- Java浅析多线程
- Java多线程浅析
- 浅析java多线程
- java多线程知识浅析
- Java中的多线程(1)
- Android之Activity与Service通信
- POJ 1401 Factorial
- 基于定位的一点心得
- HTML代码编码规范
- 杭电ACM1071The area---------求积分面积
- Java中的多线程浅析(1)
- zookeeper可视化Eclipse插件安装
- WindowManager的学习
- LightOJ 1068 Investigation
- Selenium - How does the Selenium WebDriver work?
- -Dmaven.multiModuleProjectDirectory system propery is not set.
- 一位大牛整理的python资源(转)
- 单例模式的七种写法
- 查找(顺序查找、折半查找、斐波那契查找)