多线程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方法

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。