java学习-------线程(一)线程基本概念
2016-11-18 17:41
316 查看
在学习线程之前我们需要了解一些概念,程序,进程,线程分别是什么以及它们之间的一些联系。
程序:只是一个静态的指令集合,是永存的
进程:是正在系统中运行的程序,是暂时的
线程:是进程中最小的一个执行单位,被称为轻量级进程
其中进程有一些特征:
(1)独立性:进程在系统中是一个独立的实体,它有自己的内存空间,有自己的独立的资源,进程与进程之间互不干涉。
(2)动态性:进程实质上是运行中的程序,一旦一个程序被执行了它就是一个进程,此时它被赋予了生命周期,它是暂时存在的。
(3)并发性:并发是指在同一个时间段上只能执行一条指令,但多个进程的指令被快速的转换执行,在宏观上看具有多个进程同时执行的效果。就像是我们可以一边写代码,一边听歌还可以聊天,我们感觉这些是在同时执行的,但是在CPU上其实是在快速的轮换执行,只是它的速度太快,我们感觉不出来,但是如果我们打开的程序过多,还是可以感觉到卡顿的现象存在。
线程是进程的组成成分,一个进程可以由多个且至少要有一个线程组成,当一个进程创建了同时也自动创建了一个主线程。
多线程的优势:一个进程有了多个线程,那么它就可以并发的处理多个任务,但为什么我们不创建多个进程呢?
由上面进程的独立性我们可以知道创建一个进程系统需要给它分配空间和资源,而且进程与进程之间不能共享资源,如创建多个进程那么这个开销太大了。这时多线程就比进程有了优势,一个进程中的多个线程可以共享这个进程的资源,而且还可以独立的处理多条任务。由此可见线程就比进程“轻”了,一个线程它不需要有自己独立的资源只要共享进程的资源就可以了。所以通过使用多线程实现任务并发的效率就要高很多。
线程的创建和启动:
1.继承Thread类(Thread类已经实现了Runnable接口)
2.实现Runnable接口
不管使用哪种方式,都要重写run方法,这个run方法就代表了线程的执行体,然后再通过start方法来启动线程
下面的例子是用第一种方法创建线程:
public class FirstThread extends Thread {
private int i;
public void run(){
for(;i<10;i++){
System.out.println(getName()+" "+i); //通过getName()方法返回当前线程的名(在不给出具体的线 //程名时系统会自动给出)
}
}
public static void main(String[] args){
for(int i=0;i<30;i++){
System.out.println(Thread.currentThread().getName()+" "+i);//调用Thread的currentThread方法获取 //当前线程
if(i==20){
new FirstThread().start(); //创建并启动第一条线程
new FirstThread().start(); //创建并启动第二条线程
}
}
}
}
第二种方法:
public class SecondThread implements Runnable {
private int i;
public void run(){
for(;i<10;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args){
for(int i=0;i<30;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20){
SecondThread st=new SecondThread();
new Thread(st,"新线程1").start();
new Thread(st,"新线程2").start();
}
}
}
}
程序:只是一个静态的指令集合,是永存的
进程:是正在系统中运行的程序,是暂时的
线程:是进程中最小的一个执行单位,被称为轻量级进程
其中进程有一些特征:
(1)独立性:进程在系统中是一个独立的实体,它有自己的内存空间,有自己的独立的资源,进程与进程之间互不干涉。
(2)动态性:进程实质上是运行中的程序,一旦一个程序被执行了它就是一个进程,此时它被赋予了生命周期,它是暂时存在的。
(3)并发性:并发是指在同一个时间段上只能执行一条指令,但多个进程的指令被快速的转换执行,在宏观上看具有多个进程同时执行的效果。就像是我们可以一边写代码,一边听歌还可以聊天,我们感觉这些是在同时执行的,但是在CPU上其实是在快速的轮换执行,只是它的速度太快,我们感觉不出来,但是如果我们打开的程序过多,还是可以感觉到卡顿的现象存在。
线程是进程的组成成分,一个进程可以由多个且至少要有一个线程组成,当一个进程创建了同时也自动创建了一个主线程。
多线程的优势:一个进程有了多个线程,那么它就可以并发的处理多个任务,但为什么我们不创建多个进程呢?
由上面进程的独立性我们可以知道创建一个进程系统需要给它分配空间和资源,而且进程与进程之间不能共享资源,如创建多个进程那么这个开销太大了。这时多线程就比进程有了优势,一个进程中的多个线程可以共享这个进程的资源,而且还可以独立的处理多条任务。由此可见线程就比进程“轻”了,一个线程它不需要有自己独立的资源只要共享进程的资源就可以了。所以通过使用多线程实现任务并发的效率就要高很多。
线程的创建和启动:
1.继承Thread类(Thread类已经实现了Runnable接口)
2.实现Runnable接口
不管使用哪种方式,都要重写run方法,这个run方法就代表了线程的执行体,然后再通过start方法来启动线程
下面的例子是用第一种方法创建线程:
public class FirstThread extends Thread {
private int i;
public void run(){
for(;i<10;i++){
System.out.println(getName()+" "+i); //通过getName()方法返回当前线程的名(在不给出具体的线 //程名时系统会自动给出)
}
}
public static void main(String[] args){
for(int i=0;i<30;i++){
System.out.println(Thread.currentThread().getName()+" "+i);//调用Thread的currentThread方法获取 //当前线程
if(i==20){
new FirstThread().start(); //创建并启动第一条线程
new FirstThread().start(); //创建并启动第二条线程
}
}
}
}
第二种方法:
public class SecondThread implements Runnable {
private int i;
public void run(){
for(;i<10;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args){
for(int i=0;i<30;i++){
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20){
SecondThread st=new SecondThread();
new Thread(st,"新线程1").start();
new Thread(st,"新线程2").start();
}
}
}
}
相关文章推荐
- java线程学习1——线程基本概念和操作
- java线程学习1——线程基本概念和操作
- 学习Java的30个基本概念(转)
- 学习Java的30个基本概念
- java中基本概念 (学习java前的新手用)
- java多线程学习1(补充)-线程的概念和原理
- 学习Java的30个基本概念
- 学习Java的30个基本概念
- Java深度历险(三)——Java线程:基本概念、可见性与同步
- java学习的30个基本概念
- 学习Java的30个基本概念
- 学习Java的30个基本概念
- 孙鑫VC学习笔记:第十五讲 (一) 进程和线程基本概念
- Java深度历险(三)——Java线程:基本概念、可见性与同步
- 学习Java的30个基本概念
- 学习Java的30个基本概念
- 学习Java的30个基本概念
- 学习Java的30个基本概念
- Java深度历险(三)——Java线程:基本概念、可见性与同步
- 学习Java的30个基本概念