Java线程基础
来源:互联网 发布:死或生5 mac版 编辑:程序博客网 时间:2024/05/29 13:16
近期一个做测试的朋友想转Java,问我要一些Java基础的知识,我在闲暇时间整理了一下自己的所学,一边希望自己共同学习,一边检验下自己所学,犹豫本人知识有限,有不对之处敬请见谅,希望指正。谢谢!
Java的多线程是允许不同的程序块一起运行,从而实现多任务处理的目的。
进程与线程
进程:进程是程序一次动态执行的过程。经历了从代码加载,执行到执行完毕的一个完整过程。也是进程本身从产生、发展到消亡的过程。多个进程(程序)在多进程操作系统中运行时,CPU会根据分时机制,每个进程获取自己的CPU时间片。由于CPU运行速度很快,使进程看似“同时”运行。
线程:线程是比进程更小的执行单位。线程是进程内部一个单一的顺序控制流。多线程就是指一个进程在执行过程中,可以产生多个线程。这些线程同时存在、同时执行,行成多条执行线索。一个进程可能包含多个同时执行的线程。
多线程是实现并发机制的一种手段。两者都是并发执行的基本单位。区别如下:
(1):同样作为执行的基本单元,线程比进程更小的执行单位。
(2):每个进程都有自己专属的内存区域,线程却共享内存单元,通过共享的内存单元来实现数据交换,实时通信与必要的同步操作。
线程的创建:
1 继承Thread类,覆盖run方法
2 实现Runnable接口,重写run方法
run方法就是线程的执行方法
实现Runnable接口比继承Thread的优势:
1 适合多个相同代码的线程去处理同一资源的情况。
2 避免Java中单继承带来的局限性。
3 增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程可以操作相同的数据,与它们的代码无关。当共享访问相同的对象时,即共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。
事实上,几乎所有多线程应用都可用第二种方式,即实现Runnable接口。
线程的启动:
调用父类或接口的start方法,线程即可启动。
一个线程对象只能启动一次。
线程的状态
线程的状态:创建 就绪 运行 阻塞 终止
新建状态:创建一个线程后,线程就处于新建状态。此时已经有了相应的内存空间和其他资源。但处于不可运行状态。
例如 Thread thread = new Thread();
就绪状态:调用该线程的start()方法,线程进入就绪状态。
运行状态:就绪状态的线程被调用并获取处理器资源时,线程进入运行状态。执行run方法。
阻塞状态:一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。在可执行状态下,如果调用sleep()、wait()等方法,线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程才可以转入就绪状态。
死亡状态:线程调用stop()方法(已过时)或run()方法执行结束后,线程即处于死亡状态。处于死亡状态的线程不具有继续运行的能力。
多线程的同步:
资源的共享 资源的占用
同步代码块:关键字synchronized
…
synchronized(对象)
{
需要同步的代码 ;
}
…
同步方法:关键字synchronized
访问控制符 synchronized 返回值类型方法名称(参数)
{
…. ;
}
死锁:
一旦有多个进程,且它们都要争用对多个锁的独占访问,那么就有可能发生死锁。如果有一组进程或线程,其中每个都在等待一个只有其它进程或线程才可以执行的操作,那么就称它们被死锁了。
线程的生命周期:
控制线程生命周期的方法有很多种,如:suspend方法、resume方法和stop方法。但这三个方法都不推荐使用,其中,不推荐使用suspend和resume的原因是:
(1)、会导致死锁的发生。
(2)、它允许一个线程(甲)通过直接控制另外一个线程(乙)的代码来直接控制那个线程(乙)。
虽然stop能够避免死锁的发生,但是也有其它的不足:如果一个线程正在操作共享数据段,操作过程没有完成就被“stop”了的话,将会导致数据的不完整性。因此stop方法也不提倡使用了!
通过控制run方法中循环条件的方式来结束一个线程的方法是推荐读者使用的,这也是实际中用的最多的方法。
- 线程之一:JAVA线程基础
- 线程之一:JAVA线程基础
- java线程学习基础
- Java基础 -- 线程
- Java基础 -- 线程2
- JAVA线程基础
- Java 线程基础
- Java线程基础1
- java线程基础
- java基础 线程
- Java 线程基础
- java 线程基础
- 十三、Java线程基础
- java线程基础
- java基础之线程
- JAVA线程基础(一)
- Java基础之线程
- java基础--线程总结
- js中的delete机制
- 【分享】手把手教你使用U盘安装Ubuntu系统
- A potentially dangerous Request.Form value was detected from the client (content1="<IMG border=0 src
- 【91xcz】有了win8系统快捷键,玩转win8不求人
- JWFD开发计划-合并0.96.4版本和0.97版本
- Java线程基础
- Storyboard全解析-第一部分
- 漫谈兼容内核之九: ELF映像的装入(二)
- 金融方面的手法----盘整;形态----金针探底
- 同步方式
- enode框架step by step之Staged event
- ios关于数据的存储
- 基于XMPP的IOS聊天客户端程序(XMPP服务器架构)
- java 中替换字符窜中的空格