线程

一、线程的概念

     线程是进程的一个实体,是CPU调度和分派的基本单位
      线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈,
线程切换比进程切换开销小

      多进程:在操作系统中能同时运行多个程序

      多线程:在同一程序中多个顺序刘同时执行

二、现成的五种状态

   创建状态,就绪状态 ,运行状态,阻塞状态,死亡状态

        JAVA里面,JAVA的线程是通过java.lang.Thread类来实现的,每一个Thread对象代表一个新的线程。创建一个新线程出来有两种方法:第一个是从Thread类继承,另一个是实现接口runnableVM启动时会有一个由主方法(public static void main())所定义的线程,这个线程叫主线程。可以通过创建Thread的实例来创建新的线程。你只要new一个Thread对象,一个新的线程也就出现了。每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。

     使用Thread来创建线程
public class MyThread extends Thread {

	@Override
	public void run() {
		//线程所要之星的代码
		
		for(int i = 1 ; i<=10;i++) {
			if(i%3==3) {
				//让线程休眠
				try {
					this.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			else {
				System.out.println(this.getName()+"--"+i);
			}
		}
	}
}

测试

public class Test {
	public static void main(String[] args) {
		//创建线程
		MyThread thread1 = new MyThread();
		//给线程起名
		thread1.setName("线程1");
		
		MyThread thread2 = new MyThread();
		thread2.setName("线程2");
		
		//设置线程级别
		thread1.setPriority(10);
		//启动子线程
		thread1.start();  //就绪状态 (可运行状态)
		thread2.start();  //就绪状态(可运行状态)
		
		//线程礼让yield:只礼让同级别的线程,自己也被礼让
		thread2.yield();
		
		try {
			//线程加入join:谁加入谁运行
			thread1.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

实现Runnable创建

public class MyRunnable implements Runnable {
	// 声明火车票数量
	public static int count = 10;
	private String name; // 线程名称

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void run() {
		while (count > 0) {
			buy();
		}
	}

	// 创建买票方法
	public synchronized void buy() {
		count--;
		System.out.println(name + "买到了第" + (10 - count) + "张票,还剩" + count + "张票");
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

测试

public static void main(String[] args) {
		
		//创建线程
		MyRunnable runnble1 = new MyRunnable();
		runnble1.setName("张三");
		MyRunnable runnble2 = new MyRunnable();
		runnble2.setName("李四");
		
		System.out.println("开始买票了");
		
		Thread t1 = new Thread(runnble1);
		Thread t2 = new Thread(runnble2);
		
		t1.start();
		t2.start();
	}

Runnable和Thread都可以实现run方法,但一个是接口,一个是类,前者可以无限地创建Thread进行run,而后者进行一次run之后就无法再次run,所以推荐使用实现Runnable的方法创建线程

线程状态转换


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值