首页 > 代码库 > 多线程2

多线程2

进程:正在执行的应用程序。一个应用程序运行时内存分配的空间。
线程:进程中一个程序执行的控制单元,一条执行路径。负责程序的执行顺序。作用:1.启动线程 2.运行run方法。目的是将自定义的代码存储在run方法中,让线程运行cpu每次只执行一个程序,只是在快速的不同线程间切换,表现了多线程的随机性

示例: 模拟火车站四个售票窗口同时开通售票、票数20张、预计全部售完的情况。
第一种创建线程的方式
class Mlpc extends Thread //第一步、定义类继承Thread类{    private int ticket = 20;    public void run() //第二步、覆写run方法,把需要被现场运行的代码都写在其中    {        while(true)        {            if(ticket>0)            {                System.out.println(Thread.currentThread()+"  "+ticket--);            }        }    }} class mlpcDemo {    public static void main(String[] args)     {        Mlpc m1 = new Mlpc();//第三步、通过创建Thread类的子类对象,创建了线程对象。        Mlpc m2 = new Mlpc();        Mlpc m3 = new Mlpc();        Mlpc m4 = new Mlpc();        m1.start();//第四步、调用start方法,开启线程,执行run方法        m1.start();        m1.start();        m1.start();    }}


 很明显,结果会出现四条线程‘各自为营’,各卖20张票的情况。

以上结果肯定不符合要求,于是我们使用第二种创建线程的方式。

class Mlpc implements Runnable//第一步、定义类实现Runnable接口{    private int ticket = 20;    public void run() //第二步、覆盖接口run方法,封装线程要运行的代码    {        while(true)        {            if(ticket>0)            {                System.out.println(Thread.currentThread()+"  "+ticket--);            }        }    }} class mlpcDemo {    public static void main(String[] args)     {        Mlpc m = new Mlpc();
Thread th0 = new Thread(m);//第三步、通过Thread类  创建了线程对象。 Thread th1 = new Thread(m); Thread th2 = new Thread(m); Thread th3 = new Thread(m); th0.start();//第四步、调用start方法,开启线程,执行run方法 th1.start(); th2.start(); th3.start(); }}

 

这样就对了。

run方法和 start方法

run方法 仅仅是对象调用方法,并没有运行线程 start方法 是开启线程并且执行线程中的run方法

多线程2