java多线程01-线程初识
一、线程简介
1、线程是什么,为什么使用多线程
要说线程,必须先说进程。进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。
为什么使用多线程,因为可以并行处理多个任务,提高cpu的利用率。
来个场景:
有一天,我去饭店吃饭,这个饭店只有一个厨师
“老板,给我来个酸辣土豆丝!”“好来,您前边还有十个客户,请等一下”。这是单线程,一个厨师,按照顺序做饭,我只能等待前面十个人的菜都做完才能吃到饭,假如有一个人点了一个水饺,需要半个小时才能好,那厨师半个小时只能闲着,无疑会浪费很多时间。“算了,不吃了,太久了”
此时如果是多线程。“老板,来一个酸辣土豆丝”!“好来,我去给厨师说”,厨师接到老板指示,又增加了一口锅,一会给A客户做水饺,一会给我做土豆丝。这样客户就不用等那么久了。这就是多线程的好处,可以“同时”做多个任务,不需要顺序执行。这里的“同时”并不是真正的同时,而是厨师一会做水饺,一会做土豆丝。因为只有一个厨师,相当于单核电脑。如果有多个厨师,就可以真正的“同时”,一个厨师做水饺,一个做土豆丝了。
场景中的厨师相当于cpu,做饭是一个进程,做水饺是一个线程,做土豆丝也是一个线程。厨师做饭的同时,还要做直播,那直播是另一个进程。
二、如何创建和运行线程
如何创建线程:构造Thread类。常常看到说创建线程有两种方式,一个是创建一个Thread类,一种是实现Runnable接口,这种说法是不严谨的。准确的说创建线程只有一种方法,就是构造Thead类,而实现程程的执行单元有两种方式,一是通过重写Thread的run方法,一个是实现Runbable接口的run方法。
如何运行线程:调用线程的start方法。
1、通过重写Thread类的run方法实现程程的执行单元,调用start方法运行线程
public class ThreadTest { public static void main(String[] args) { Thread thread1 = new Thread(){ @Override public void run(){ System.out.print("酸辣土豆丝"); } }; thread1.start(); System.out.println("水饺"); } }
2、通过实现Runnable接口实现程程的执行单元,调用start方法运行线程
public class ThreadTest { public static void main(String[] args) { Thread suanlatudousiThread = new Thread(new suanlatudousiTask()); Thread shuijiaoThread = new Thread(new shuijiaoTask()); suanlatudousiThread.start(); shuijiaoThread.start(); } } class suanlatudousiTask implements Runnable{ @Override public void run() { System.out.println("酸辣土豆丝"); } } class shuijiaoTask implements Runnable{ @Override public void run() { System.out.println("水饺"); } }