多线程
2015-10-04 08:18
197 查看
多线程:
线程:进程中的一个控制流程单元。
一个进程中至少有一个线程。
只有一个线程的程序,称为单线程。
有多个线程的程序,称为多线程。
开启多线程有什么好处?
1,提高效率,原理就是在合理使用cpu资源。
2,可以让多部分代码同时执行。
创建示例:聊天程序,接收和发送就是需要同时执行的。
线程的特性:随机性。原理:其实是cpu不断的进行时间片的切换。
想要在Java语言中使用多线程技术,Java对线程这类事物进行描述。
提供了一个对象:Thread。
有一点必须明确:只有Thread类或者Thread类的子类对象才可以调用系统资源创建控制单元。
创建线程的两种方式:
1,继承Thread类。
1.1继承Thread,
1.2复写run方法,将多线程需要运行的代码存入该方法中。
1.3创建Thread的子类对象,(创建线程)
1.4调用start方法开启线程。(start方法做了两个动作,开启线程,调用run方法。)
2,实现Runnable接口。
2.1实现Runnable接口。
2.2复写接口中的run方法。
2.3创建Runnable接口的子类对象。
2.4创建Thread类的对象(创建线程)
2.5将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
原因:多线程去执行指定的run方法。
2.6调用Thread类的start方法开启线程。
class Demo implements Runnable
{
public void run()
{
System.out.println("demo run");
}
}
main()
{
Demo d = new Demo();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.start();
t2.start();
}
两种方式的区别:
1,实现方式和继承方法使用的run方法的位置不同。
2,实现方法避免了单继承的局限性。******
线程的生命周期:
1,被创建。new
2,可运行。start
3,冻结。线程还活着,但是cpu不执行它。sleep,wait.
4,消亡。线程挂了。stop,run结束。(线程执行代码结束,线程就停止)
线程安全问题。
引发原因:
当线程运行的代码中有对成员变量(共享数据)进行多次操作时,就有可能引发安全问题。
因为多条操作同一资源的语句被多个线程分开运行就会发生。
int tick = 100;
run()
{
if(tick>0)
tick--;
}
解决的原理:只要在同一时间段,只让一个线程将这些操作同一资源的代码执行完即可。
这执行过程,其他的线程不可以参与执行该代码。
java提供了同步方式来完成线程安全问题的解决.
1,同步原理:
其实就是通过带锁的代码块将容易出现安全问题的代码进行封装。
2,同步好处:
解决了线程安全问题。
3,同步弊端:
降低了运行效率。(判断锁是较为消耗资源的)
4,同步的表现形式:
1,同步代码块。
synchronzied(对象锁){
需要被同步的代码。(哪些需要同步哪些不需要一定要分清)
}
2,同步函数。
就是在函数上加了synchronzied关键字进行修饰。、
同步代码块可以使用任意对象作为锁。
同步函数使用的锁只有一个,就是this。
5,同步前提:
1,必须是两个或者两个以上的线程。
2,多个线程必须使用同一个锁。
有一个比喻:火车上的卫生间。
线程:进程中的一个控制流程单元。
一个进程中至少有一个线程。
只有一个线程的程序,称为单线程。
有多个线程的程序,称为多线程。
开启多线程有什么好处?
1,提高效率,原理就是在合理使用cpu资源。
2,可以让多部分代码同时执行。
创建示例:聊天程序,接收和发送就是需要同时执行的。
线程的特性:随机性。原理:其实是cpu不断的进行时间片的切换。
想要在Java语言中使用多线程技术,Java对线程这类事物进行描述。
提供了一个对象:Thread。
有一点必须明确:只有Thread类或者Thread类的子类对象才可以调用系统资源创建控制单元。
创建线程的两种方式:
1,继承Thread类。
1.1继承Thread,
1.2复写run方法,将多线程需要运行的代码存入该方法中。
1.3创建Thread的子类对象,(创建线程)
1.4调用start方法开启线程。(start方法做了两个动作,开启线程,调用run方法。)
2,实现Runnable接口。
2.1实现Runnable接口。
2.2复写接口中的run方法。
2.3创建Runnable接口的子类对象。
2.4创建Thread类的对象(创建线程)
2.5将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
原因:多线程去执行指定的run方法。
2.6调用Thread类的start方法开启线程。
class Demo implements Runnable
{
public void run()
{
System.out.println("demo run");
}
}
main()
{
Demo d = new Demo();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.start();
t2.start();
}
两种方式的区别:
1,实现方式和继承方法使用的run方法的位置不同。
2,实现方法避免了单继承的局限性。******
线程的生命周期:
1,被创建。new
2,可运行。start
3,冻结。线程还活着,但是cpu不执行它。sleep,wait.
4,消亡。线程挂了。stop,run结束。(线程执行代码结束,线程就停止)
线程安全问题。
引发原因:
当线程运行的代码中有对成员变量(共享数据)进行多次操作时,就有可能引发安全问题。
因为多条操作同一资源的语句被多个线程分开运行就会发生。
int tick = 100;
run()
{
if(tick>0)
tick--;
}
解决的原理:只要在同一时间段,只让一个线程将这些操作同一资源的代码执行完即可。
这执行过程,其他的线程不可以参与执行该代码。
java提供了同步方式来完成线程安全问题的解决.
1,同步原理:
其实就是通过带锁的代码块将容易出现安全问题的代码进行封装。
2,同步好处:
解决了线程安全问题。
3,同步弊端:
降低了运行效率。(判断锁是较为消耗资源的)
4,同步的表现形式:
1,同步代码块。
synchronzied(对象锁){
需要被同步的代码。(哪些需要同步哪些不需要一定要分清)
}
2,同步函数。
就是在函数上加了synchronzied关键字进行修饰。、
同步代码块可以使用任意对象作为锁。
同步函数使用的锁只有一个,就是this。
5,同步前提:
1,必须是两个或者两个以上的线程。
2,多个线程必须使用同一个锁。
有一个比喻:火车上的卫生间。
相关文章推荐
- Shell Script学习笔记1:循环表达(for, while, until)
- setUncaughtExceptionHandler
- Java多线程的用法详解
- Java Callable用法
- ExecutorService线程池
- 详解MySQL Cluster管理结点的config.ini配置文件
- 索引
- 常用SQL语句大全
- sql优化方法
- sql 查询结果if else
- mysql引擎
- mysql高速缓冲
- 【Android-002】【常见布局】
- mysql explain 详解
- c3p0源码分析
- c3p0-config.xml
- 基于百度地图的地理位置选择功能
- MySql常用命令总结
- 与近似比固定算法的高性能算法
- 如何去掉Eclipse恼人的悬浮框提示