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