多线程
线程简介
进程
进程是执行程序的一次执行过程,它是一个动态概念,是系统资源分配的单位
线程
通常一个进程中可以包含若干个线程,一个进程至少有一个进程。线程是CPU调度和执行的单位。
注意:
很多多线程是模拟出来的,真正的多线程是指多个CPU,即多核,如服务器。如果是模拟出来的多线程,即在一个CPU的情况下,在同一时间点,CPU只能执行一个代码,因为切换快,所以就有同时执行的错觉。
线程实现(重点)
三种方法:
-
Thread类:继承Thread类(重点)
①自定义线程类继承Thread类
②重写run()方法,编写线程执行体
③创建线程对象,调用start()方法启动线程
public class TestThread1 extends Thread{ @Override public void run() { for (int i=0;i<100;i++) System.out.println("我在看代码"+i); } public static void main(String[] args) { //创建一个线程对象 TestThread1 testThread1 = new TestThread1(); //调用start方法开启线程 testThread1.start(); for (int i = 0; i < 1000; i++) { System.out.println("我在学习多线程"+i); } } -
Runnable接口:实现Runnable接口(重点)
①定义一个类实现Runnable接口
②实现run()方法,编写 线程体
③创建线程对象,调用start()方法启动线程
public class TestThread2 implements Runnable{ @Override public void run() { //run方法线程体 for (int i=0;i<100;i++) System.out.println("我在看代码------------------"+i); } public static void main(String[] args) { //创建Runnable接口的实现类对象 TestThread2 testThread2 = new TestThread2(); //创建一个线程对象,通过线程对象来开启线程代理 // Thread thread = new Thread(testThread2); // thread.start(); new Thread(testThread2).start(); for (int i = 0; i < 1000; i++) { System.out.println("我在学习多线程"+i); } } } -
Callable接口:实现Callable接口
①定义一个类实现Callable接口
②重写call()方法
③创建执行服务
④提交执行
⑤获取结果
⑥关闭服务
线程状态
五个状态:NEW、RUNNABLE、BLOCKED、WAITTING、TIMED WAITTING、TERMINATED

线程同步(重点)
多个线程操作同一个资源
理解:
处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象 ,这时候我们就需要线程同步,线程同步其实是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用。
为了保证数据在方法中被访问时的正确性,在访问时加入锁机制(synchronized),当一个线程获得对象的排他锁,独占资源,其他线程必须等待,使用后释放锁即可
两种用法:synchronized方法和synchronized块
-
同步方法无需指定同步监视器,因为同步方法的监视器就是this或者class。
-
synchronized块:
synchronized(obj){ },obj称之为同步监视器,可以是任何对象,但推荐使用共享资源作为同步监视器

浙公网安备 33010602011771号