进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。通俗来讲,进程就是在操作系统中运行的程序,例如:电脑中运行的微信、eclipse、idea等。
2.什么是线程线程是操作系统能够进行运算调度的最小单位。一个进程至少有一个线程,一个程序可以有多个线程。
3.多线程如果一个程序可以同时运行多个线程,那么这个程序就是多线程的。例如看视频时程序同时进行加载图像、获取字幕和获取弹幕等。
二、线程的创建 1.继承Thread类步骤:
(1)创建线程类,并继承Thread类
(2)重写run()方法,编写线程执行体
(3)创建线程对象,调用start()方法启动线程
示例代码如下:
public class TestThread extends Thread{
@Override
public void run() {
//重写run方法线程执行体
for (int i = 0; i < 100; i++) {
System.out.println("testThread线程第"+i+"次执行");
}
}
public static void main(String[] args) {
//创建线程对象
TestThread testThread = new TestThread();
//调用start()方法开启线程
testThread.start();//子线程开启,和主线程交替执行
//main线程执行一个for循换
for (int i = 0; i < 100; i++) {
System.out.println("main线程第"+i+"次执行");
}
}
}
执行结果如下图所示,testThread和main两个线程会交替执行100次。截取了部分输出结果。
步骤:
(1)定义MyRunnable类实现Runnable接口
(2)实现run()方法,编写线程执行体
(3)创建Runnable接口的实现类对象
(4)创建线程对象,调用start()方法启动线程
示例代码如下:
public class TestRunnable implements Runnable{
@Override
public void run() {
//重写run方法线程体
for (int i = 0; i < 100; i++) {
System.out.println("testRunnable线程第"+i+"次执行");
}
}
public static void main(String[] args) {
//创建Runnable接口的实现类对象
TestRunnable testRunnable = new TestRunnable();
//创建线程对象,通过线程对象来开启我们的线程,代理
Thread thread = new Thread(testRunnable);
//调用start方法,启动线程
thread.start();//子线程开启,和主线程交替执行
//main线程执行for循换
for (int i = 0; i < 100; i++) {
System.out.println("main线程第"+i+"次执行");
}
}
}
执行结果testThread和main两个线程会交替执行100次,和上一段程序一样。
3.实现Callable接口步骤
(1)实现Callable接口,需要返回值类型
(2)重写call方法,需要抛出异常
(3)创建目标对象
(4)创建执行服务
(5)提交执行
(6)获取结果
(7)关闭服务
public class TestCallable implements Callable三、线程状态 1.线程的五种状态{ //重写call方法 @Override public Boolean call() { for (int i = 0; i < 100; i++) { System.out.println("testCallable线程执行了"+i); } return true; } public static void main(String[] args) throws ExecutionException, InterruptedException { TestCallable testCallable = new TestCallable(); //创建执行服务 ExecutorService service = Executors.newFixedThreadPool(1); //提交执行 Future future = service.submit(testCallable); //获取结果 Boolean result = future.get(); //关闭服务 service.shutdownNow(); } }
(1)新建状态(New): 线程对象被创建后,就进入了新建状态。执行完
(2)就绪状态(Runnable):调用线程对象的start()方法后,该线程进入就绪状态。此时线程进入等待队列,随时可能被CPU调度执行。
(3)运行状态(Running): run方法被执行时,线程获取CPU权限进行执行,进入了运行状态。
(4)阻塞状态(Blocked): 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。 当程序运行时候,遇到了 sleep、wait、join等方法或获取同步锁失败时会进入阻塞状态。
(5)死亡状态(Dead): 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。



