java线程

什么是线程

看我!!!!

一个程序由多个进程构成,一个进程的执行过程中,会产生多个线程。线程之间可以共享相同的内存空间(包括数据和代码),并利用这些共享单元来实现数据交换,实时通信与必要的同步操作。

Thread类与Runnable接口

在java中,由java.lang.Thread类来实现线程
CPU所执行的代码,在构造Thread类时,传递给Thread对象。
CPU所处理的数据,在构造Thread类时,传递给Thread对象。

Runnable对象是指实现了java.lang.Runnable接口的任何对象,Runnable接口只有一个方法run()
这个run()方法实际上就是线程所需要执行的代码。

为了构造一个Thread类,可以向Thread()传递一个Runnable对象,这个Runnable对象就是线程所需要的代码和数据的封装。

要启动线程中的代码,需要执行Thread类的start()方法,则系统会在可能的情况下去执行run()方法中所规定的代码.

线程创建的两种方法

创建线程对象,要传递代码和数据。

通过继承Thread类创建线程

从Thread类中派生出一个新类,在其中加入属性和方法,同时覆盖run()方法。当创建这样一个派生类的新对象后,使用start()方法,即可启动线程

public class Test{
	public static void main(String[] args){
		Thread t = new MyThread();
		t.start();
	}	
}
class MyThread extends Thread{
	public void run(){
		for(int i = 0 ; i < 100; i++){
			System.out.println(" "+ i );
			}
	}
}

这种方法的缺点是只能继承一个类

通过向Thread()构造方法传递Runnable对象来创建线程
public class Test{
	public static void main(String[] args){
		MyTest mytest = new MyTest(100);
		Thread thread = new Thread(mytest);   //向Thread构造方法传递Ruuuable对象
		thread.start();
	}
}
class MyTest implements Runnable{    //实现了Runnable接口,承载了线程所需要的代码和数据
	private int n;
	public MyTest(int n){
		this.n = n;
	}
	public void run(){      //run()方法中就是线程所需要的代码
		for(int i = 0; i < n; i++){
			System.out.println(" "+i);
			try{
				thread.sleep(500);
			}catch(InterruptedException e){}
		}
	}
}

注意的是:
程序运行时,首先启动主函数线程,主函数线程结束,启动其他线程。
每个线程在执行完一次循环后,会休眠一段时间。
run()方法规定了线程所需要的任务,但一般不是直接调用run()方法,而是通过start()方法来启动线程。

Thread类中的sleep()方法,他表示线程等待(休眠)一定的时间,单位为毫秒。但休眠的时间一般不会严格等于所给定的时间。休眠过程中可能会被其他线程中断,所以要求捕InterruptedException异常

线程的状态和生命周期

  1. 新建
    当一个Thread对象或其子类对象被new时,他就拥有了相应的内存空间和其他资源,但没有开始执行。
  2. 就绪
    执行start()方法后,被放入线程队列排队等待执行,一旦轮到它来使用处理器资源时,即可脱了主线程来独立开始自己的生命周期。
    原来阻塞的线程被解除阻塞后也将进入就绪状态。
  3. 运行
    就绪状态的线程被调度并获得处理器资源时,便进行运行状态。当线程对象被调度执行时,它将自动调用本对象的run()方法。
  4. 阻塞
    一个正在执行的线程在某些特殊情况下(如被人为挂起或需要执行费时的输入/输出操作时),它将让出CPU并暂时中止自己的执行,进入阻塞状态。
    只有引起阻塞的原因被消除,线程才能进入就绪状态,重新进入到线程队列里等待CPU资源。
  5. 死亡
    处于死亡或终止状态的线程不具1有继续运行的能力。

线程类的主要方法

sleep(); 线程休眠
join(); 合并线程
destory(); 销毁线程
yield(); 暂停线程

挂起线程

  1. sleep();方法 需要捕捉InterruptedException异常
  2. yield();方法 暂停当前线程,并将其放入可运行队列
  3. interrupt()方法 一个线程运行时,另一个线程调用相对应Thread类中的Interrupt()方法来中断他
  4. wait()方法 使线程进入等待状态 直至被另一个线程唤醒
  5. join()方法 将几个并行的线程合并成单线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值