java线程

程序:可以理解为一组静态的代码

进程:正在进行的程序   静态的代码  运行起来

线程:正在执行程序中的小单元

1.主线程  系统线程

2.用户线程 main

3.守护线程(精灵)GC

线程--操作系统级别  CPU

如何在java中创建线程  让线程执行 多线程

掌握每一个线程的几种不同状态  状态之间如何切换

new   start()  CPU分配(run())   wait()  exception over

创建线程---就绪状态---执行状态---等待/挂起---异常/消亡---

       |                                    |

       |__________________|

          notify/notifyAll

启动线程的3种方式:Thread;Runnable;线程池启动线程;

 

 

实现线程的过程 (方式1)

1.自己描述一个类  

2.继承父类 Thread

3.重写run方法

4.new一个线程对象  调用start()方法  让线程进入就绪状态

实现一个多人跑步的小例子

package test0603;
public class RunningMan extends Thread{
	private String name;
	public RunningMan(){
	}
	public RunningMan(String name){
		this.name=name;
	}
	
	//重写run方法
	public void run(){
		for(int i=1;i<=100;i++){
			System.out.println(this.name+"跑到第"+i+"米");
		}
	}
}

 

package test0603;
public class TestMain{
	public static void main(String[] args){
		RunningMan r1=new RunningMan("张三");
		RunningMan r2=new RunningMan("李四");
		RunningMan r3=new RunningMan("王五");
		//调用start方法  让线程进入就绪状态 CPU分配执行(无序)每次执行结果不一样
		/*
		r1.start();
		r2.start();
		r3.start();
		*/
		//run()方法是顺序执行
		r1.run();
		r2.run();
		r3.run();
		
	}
} 

实现线程的过程(方式2)

1.自己描述一个类

2.实现一个父接口Runnable

3.重写run方法

4.new一个线程对象 需要创建Thread将自己的对象包起来 然后调用start()

package test0603;
public class RunningMan implements Runnable{
	private String name;
	public RunningMan(){
	}
	public RunningMan(String name){
		this.name=name;
	}	
	//重写run方法
	public void run(){
		for(int i=1;i<=100;i++){
			System.out.println(this.name+"跑到第"+i+"米");
		}
	}
}

  

package test0603;
public class TestMain{
	public static void main(String[] args){
		RunningMan r1=new RunningMan("张三");
		RunningMan r2=new RunningMan("李四");
		RunningMan r3=new RunningMan("王五");
		Thread t1=new Thread(r1);
		Thread t2=new Thread(r2);
		Thread t3=new Thread(r3);
		//调用start方法  让线程进入就绪状态 CPU分配执行(无序)每次执行结果不一样	
		t1.start();
		t2.start();
		t3.start();		
	}
}

12306卖票

车票 属性 起始站 终点站  票价

系统 属性 方法

窗口 是一个线程

利用Vector集合,集合本身就是线程安全 多个线程并发操作同一个集合的时候 不会抢夺资源;

1.如何切换线程的不同状态

2.如果在设计中没有集合 我们自己想要控制线程安全

package test0603;
public class Ticket{
	//一个对象 包含很多属性 增强可读性  类名 属性名 属性类型不一致;
	private String start;//起始站名
	private String end;//终点站名
	private Float price;
	public Ticket(){
	}
	public Ticket(String start,String end,Float price){
		this.start=start;
		this.end=end;
		this.price=price;
	}
	public String getStart(){
		return start;
	}
	public void setStart(String start){
		this.start=start;
	}
	public String getEnd(){
		return end;
	}
	public void setEnd(){
		this.end=end;
	}
	public Float getPrice(){
		return price;
	}
	public void setPrice(Float price){
		this.price=price;		
	}
	//为了打印一个对象
	public String toString(){
		StringBuilder sbb=new StringBuilder("[起始地址:");
		sbb.append(start);
		sbb.append(";\t终点地址:");
		sbb.append(end);
		sbb.append(";\t票价为:");
		sbb.append(price);
		sbb.append(";]");
		return sbb.toString();
	}
}

 

package test0603;
import java.util.*;
public class System12306{
	//设计一个单例模式
	private System12306(){
	}
	private static System12306 sys=new System12306();
	public static System12306 getInstance(){
		return sys;
	}
	private Vector<Ticket> tickets=new Vector<>();
	{
		for(int i=10;i<100;i++){
			tickets.add(new Ticket("武汉"+i,"深圳"+i,(i%5+5)*25F));
		}
	}
	//从集合内获取一张票;
	public Ticket getTicket(){
		try{
			return tickets.remove(0);
		}catch(Exception e){
			return null;
		}
	}
}

 

package test0603;
public class Windows extends Thread{
	private String windowName;
	public Windows(String windowName){
		this.windowName=windowName;
	}
	public void run(){
		this.sellTicket();
	}
	public void sellTicket(){
		while(true){
			System12306 sys=System12306.getInstance();
			Ticket ticket=sys.getTicket();
			if(ticket==null){
				System.out.println("对不起,本窗口"+windowName+"车票已售完");
				break;
			}
			System.out.println("本窗口"+windowName+"售出"+ticket);
		}
	}
}

 

package test0603;
public class TestMain{
	public static void main(String[] args){
		Windows w1=new Windows("站台A");
		Windows w2=new Windows("站台B");
		Windows w3=new Windows("站台C");
		w1.start();
		w2.start();
		w3.start();
	}
}

  

 

 

 

 

 

 

posted on 2020-06-03 21:52  星空6  阅读(142)  评论(0编辑  收藏  举报

导航