1、线程
1.1线程的概念 (英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程执指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
1.2为什么要引入多线程? 答:我觉的是因为虽然进程可以提高CPU的利用率,但是进程之间的切换是非常耗费资源和时间的,为了能更进一步的提高 操作系统的并发进,引进了线程
1.3线程的生命周期
- 新建状态 :当线程对象对创建后,即进入了新建状态
- 就绪状态 :当调用线程对象的start()方法(t.start();),线程即进入就绪状态。
- 运行状态 :当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。
- 堵塞状态 :处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。
- 堵塞状态:线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
2、java中多线程的创建
2.1方法介绍 java中创建线程在jdk1.5之前有两种方式:1.实现Runnable接口2.继承Thread类 。不论是实现Runnable接口还是继承Thread类,都是实现public void run()方法。 两种实现方法上没有什么不同,区别在于实现的路径。由于java中只能单继承,接口就更加灵活,Thread是runnable的子类,使用runnable可以避免class单一继承的问题。使用runable能够更加清晰的表达数据共享。 都线程之间的共享一个实现类,降低了耦合性,常用于处理共享资源在实际开发中,建议大家使用是是西安Runnable接口的方式创建多线程 java中的线程的体现:以对对象的方式体现 Thread类。 在jdk1.5之后的方式:实现Callable接口以及线程池的方式
2.2具体实现 继承继承Thread类:
- 继承Thread类
- 重写run方法
- 创建线程类的实例:此处创建继承Thread类的对象后,可以直接调用,也可以将此对象当作参数传入Thread对象。
- 调用线程类的start方法让线程处于继续状态
public class ThreadTest {
public static void main(String[] args) {
Thread1 thread1=new Thread1();//3
thread1.start();
}
}
class Thread1 extends Thread{//1
@Override
public void run(){//2
for(int i=0;i<200;i++) {
System.out.println("Thread2run "+i);
}
}
}
实现Runnable接口
- 自定义线程类
- 重写Runnable接口中的方法
- 创建实现类对象
- 创建线程 此处创建继承Thread类的对象后,可以直接调用,也可以将此对象当作参数传入Thread对象。
- 启动线程
ublic class RunnableUmplTest {
public static void main(String[] args) {
RunnableImpl r=new RunnableImpl();//3
Thread t1=new Thread(r);//4
t1.start();//5
}
}
class RunnableImpl implements Runnable{//1
@Override
public void run(){//2
for(int i=0;i<20;i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
3、java中多线程的一些简单方法
Thread():创建新的线程
Thread(Raunnable target):创建新的线程,并传入Raunnable对象
name.start():使该线程就绪
Thread.sleep(long millis
):使当前正在执行的线程以指定的毫秒数暂停。该方法抛出异常,需要做异常的捕获处理。
name.setName():修改该线程的名称
name.getName():获取该线程的名称
Thread.currentThread()返回对当前正在执行的线程对象的引用。