day10多线程及创建线程两种方法

java vm 启动的时候会有一个进程java.exe

该进程中至少一个线程负责java程序的执行
而且这个进程运行的代码存在于mian方法,
该线程称为主线程

其实JVM启动时,不止一个线程,还有负责回收垃圾机制的线程

1.如何在自定义的代码中,自定义一个线程

通过对api的查找,java已经提供了对线程事物的描述,就是Thread类

创建线程的第一种方式:继承Thread类。
步骤:
1、定义类继承Thread
2、复写Thread类中的run方法
3、调用线程的start方法,
该方法两个作用:启动线程,调用run方法

发现运行结果每一次都不同。
因为多个线程都获取cpu的执行权。cpu执行到谁,谁就运行
在某一时刻只能有一个程序在运行(多核除外)
cpu在做着快速切换,达到看上是同时运行的效果。

这就是多线程的一个特性:随机性。谁抢到谁执行,执行多长,cpu说了算

*/

创建线程的第二种方式:实现Runnable类。

1.定义类实现Runnable接口

2.复写Runnable接口中的run方法

3.通过thread类建立线程对象

4.将Runnable接口的子类对象作为实际参数传递给thread类的构造函数

5.调用thread类的start方法开启线程并调用Runnable接口子类的run方法


/*
需求:简单的卖票程序
多个窗口卖票
*/

class Ticket implements Runnable //extends Thread
{
private static int tick=100;
public void run()
{
int count=0;
while (true)
{
if (tick>0)
{
System.out.println(Thread.currentThread().getName()+"....sale:"+(tick--)+"卖了"+(count++));
//System.out.println(count);

}
}
}
public void getCount(int[] i)
{
int max=0;
for (int x=1;x< 4; x++)
{
if(i[x]>i[max])
{
max=x;
}

}
return i[max];
}
}


class  TicketDemo
{
public static void main(String[] args) 
{
/*Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();*/

Ticket t=new Ticket();

Thread t1=new Thread(t);//创建了一个线程。
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();

}
}

-------------------------------

/*
通过分析,发现,打印出0.-1-2等错票
多线程的运行出现了安全问题
*/
class Ticket implements Runnable
{
private static int tick=100;
public void run()
{
while (true)
{
if (tick>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{


}
System.out.println(currentThread().getName()+"....sale:"+tick--);
}
}
}
}

class  TicketDemo2
{
public static void main(String[] args) 
{
/*Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();*/

Ticket t=new Ticket();

Thread t1=new Thread(t);//创建了一个线程。
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值