一、线程的相关介绍:
进程:正在运行的程序,负责了这个程序的内存空间分配,代表了内存中的执行区域。
线程:就是在一个进程中负责一个执行路径。
多线程:就是在一个进程中多个执行路径同时执行。
二、多线程的好处:
1、解决了一个进程里面可以同时运行多个任务(执行路径);
2、提高了资源利用率(注意不是提高效率)。
三、多线程的弊端:
1、降低了进程中一个线程的执行频率;
2、对多线程的管理需要额外的cpu资源消耗,多线程的使用会给系统带来上下文切换的额外负担;
3、线程安全问题(多个线程对公有变量进行写操作时,后一个线程会修改掉前一个线程存放的数据);
4、线程死锁。
四、多线程的实现
方式一:继承Thread类并重写run方法。
package cn.itcast.thread; class DemoThread extends Thread { public DemoThread(String name) { super(name); } @Override public void run() { System.out.println(Thread.currentThread().getName()); } } public class Demo { public static void main(String[] args) { DemoThread th1 = new DemoThread("线程1"); DemoThread th2 = new DemoThread("线程2"); th1.start(); th2.start(); } }
方式二:使用Runable接口
package cn.itcast.thread; class DemoThread implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()); } } public class Demo { public static void main(String[] args) { DemoThread th1 = new DemoThread(); Thread t1 = new Thread(th1); DemoThread th2 = new DemoThread(); Thread t2 = new Thread(th2); t1.start(); t2.start(); } }
五、线程状态
创建-->可运行-->运行(<-->临时阻塞)-->死亡
创建:新创建了一个线程对象。
可运行:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取cpu的执行权。
运行:就绪状态的线程获取了CPU执行权,执行程序代码。
阻临时塞: 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
死亡:线程执行完它的任务时。