多线程
多线程的理解
进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。
线程:不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
一个程序运行之后至少有一个进程。一个进程里面可以包含多个线程,但至少包含一个线程。
并发和并行
并行是逻辑上同时发生,指在某一个时间内同时运行多个程序。
并发是物理上同时发生,指在某一个时间点同时运行多个程序。
多线程的优势
(1)进程之间不能共享内存,但线程之间可以共享内存。
(2)多线程来实现多任务并发比多进程的效率高。
多线程的实现
创建线程
(1)继承Thread类的创建
通过Thread类来创建并启动多线程的步骤:
1、自定义类MyThread继承Thread类。
2、重写run( )方法。
3、创建对象。
4、启动线程
public class MyThread extends Thread {
public void run() { //重写run()方法,是因为run()方法体就是线程的执行体
for(int x = 0; x < 100; x++) {
System.out.println(getName()+ ":" + x); // getName()方法就是返回调用该方法的线程名字
}
}
public static void main(String[] args)
{
for(int i = 0 ; i < 100 ; i++)
{
System.out.println(Thread.currentThread().getName() + " " + i);//调用Thread类中的currentThread方法来获取当前的线程
if(i == 20)
{
new MyThread().start();
new MyThread().start();
}
}
}
}
在运行的过程中java程序运行的默认的主线程就是main()方法的方法体。
(2)实现Runnable接口创建线程
通过实现Runnable接口创建的步骤:
1、自定义类MyRunnable实现Runnable接口
2、重写run()方法
3、创建MyRunnable类的对象
4、创建Thread类的对象,并把3步骤的对象作为构造参数传递
public class MyRunnable implements Runnable {
public void run() {
for(int x = 0; x < 100; x++) {
System.out.println(Thread.currentThread().getName()+ ":" + x);
} }
public static void main(String [] args) {
for ( int i = 0 ; i < 100 ; i++)
{
System.out.println(Thread.currentThread().getName() + " " + i);
if ( i == 20 )
{
MyRunnable mr = new MyRunnable();
new Thread(mr , "线程1" ).start();
new Thread(mr , "线程2" ).start();
}
}
}
}
关于Runnable接口我也只会这一些基础的建立。
线程的生命周期
线程的生命周期有五个状态,分别是新建,就绪,运行,阻塞,死亡。
新建状态:
使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。
就绪状态:当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。
运行状态:如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。
阻塞状态:如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。
死亡状态:一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态,结束的有三种方式
1、run()方法执行完成,线程正常结束。
2、线程抛出一个异常或错误。
3、直接调用stop()方法来结束。
线程的优先级
java 线程的优先级是一个整数,其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)。
可以使用yield方法来调整线程的优先级。
未完待续