线程与第一个线程程序
1.线程的相关概念
首先得知道什么是进程什么是线程?
我的理解是进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例。
线程是进程的一个实体。
进程——资源分配的最小单位,线程——程序执行的最小单位。
线程与进程的区别:
1. 一个程序至少有一个进程,一个进程至少有一个线程
2. 线程的划分尺度小于进程,使得多线程程序的并发性高
3. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
4. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
5. 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配
2.线程创建的两种方法
在Java可以使用两种方法创建线程。第一种方式是通过创建Thread类构造子类,创建子类对象生成线程,另一种是构造一个实现Runnable接口的类,创建该类对象,用该类对象作为参数创建Thread对象生成线程。
2.1 Thread类
构造方法·:
public Thread(ThreadGroup group,Runnable target,String name);
group:指明该线程所属的线程组。
target:实际执行线程体的对象。
name:线程名字。
格式中的各项参数都可以为空。
常用方法:
(1)start():启动线程。
(2)run():线程体。
(3)sleep(int millsecond): 使线程睡眠millsecond毫秒。
(4)currentThread():获取当前线程。
(5)interrupt():中断线程。
创建线程的步骤:
- 创建一个Thread类的子类。
- 覆盖Thread类的run()方法。
- 创建所定义的子类的一个对象。
- 调用该对象的start()方法启用线程。
实例:使用Thread的子类创建线程。
package project;
public class ThreadCreate1 {
public static void main(String args[]){
//创建一个Thread类数组
Thread th[]=new Thread[3];
//使用子类实例化数组
th[0]=new AnimalThread("线程1");
th[1]=new AnimalThread("线程2");
th[2]=new AnimalThread("线程3");
th[0].start();
th[1].start();
th[2].start();
}
}
//创建一个Thread类的子类
class AnimalThread extends Thread{
//构造方法指定线程名字
public AnimalThread(String name){
super(name);//调用父类构造方法
}
//重写run()方法
public void run(){
for(int i=1;i<4;i++){
//getName()方法返回线程名字
System.out.println(getName()+"的第"+i+"次输出");
try{
//使线程睡眠50毫秒
sleep(50);
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println(getName()+"结束!");
}
}
运行截图:
说明:每次执行可能会产生不同的结果,因为代码没有准确的控制什么时候执行哪个线程。
2.2 Runnable 接口
1.Runnable接口的定义格式
java.lang中Runnable接口的定义如下:
public interface Runnable(){
void run();
}
2. Runbable 接口创建线程的步骤
(1)定义一个实现Runnable接口的类·。
(2)实现接口中的的run()方法。
(3)创建所定义的子类的一个对象。
(4)调用该对象的start()方法启用线程。
实例:实现Runnable接口 创建线程。
package project;
public class ThreadCreate2 {
public static void main(String[] args) {
//创建一个Thread类数组
Thread th[]=new Thread[3];
//使用子类实例化数组
th[0]=new AnimalThread("线程1");
th[1]=new AnimalThread("线程2");
th[2]=new AnimalThread("线程3");
th[0].start();
th[1].start();
th[2].start();
}
}
class ThreadRunnable implements Runnable{
public void run(){
for(int i=1;i<4;i++){
//getName()方法返回线程名字
System.out.println(Thread.currentThread().getName()+"的第"+i+"次输出");
try{
//使线程睡眠50毫秒
Thread.currentThread();
Thread.sleep(50);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
运行截图:
说明:也一样,每次执行可能会产生不同的结果,因为代码没有准确的控制什么时候执行哪个线程。
上一篇: iOS下载图片失败