day10多线程及创建线程两种方法
2016-08-25 20:44
525 查看
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();
}
}
该进程中至少一个线程负责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();
}
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序