关于java线程类

关于java线程类

 

一、如何启动一个线程?

 

1、继承Thread类,覆写run方法,实例化之后直接调用实例的start方法

/**	
 * 线程类实现方法1:继承Thread类,覆写run方法
 * @author  Walter.Huang
 * @create date 2014-12-8
 */
public class Runner extends Thread {
	
	@Override
	public void run() {
		super.run();
		try {
			System.out.println("I'm "+this.getName()); //线程名称
			System.out.println("I'm runing!");
			TimeUnit.SECONDS.sleep(3); //线程睡3秒
			System.out.println("I stopped!");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
	}
	
	public static void main(String[] args) {
		Runner runner =new Runner();//实例化
		runner.start();//调用start方法启动线程
	}
	
}

 

2、类实现Runnable接口,实现run方法,通过该类构造一个Thread类,调用Thread类的start方法启动线程

/**	
 * 线程类实现方法2:实现Runnable接口,覆写run方法
 * @author  Walter.Huang
 * @create date 2014-12-8
 */
public class Runner implements Runnable {
	
	@Override
	public void run() {
		try {
			System.out.println("I'm runing!");
			TimeUnit.SECONDS.sleep(3); //线程睡3秒
			System.out.println("I stopped!");
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
	}
	
	public static void main(String[] args) {
		Runner runner =new Runner();//实例化
		Thread thread =new Thread(runner); //构造一个Thread
		thread.start();//调用start方法启动线程
	}
	
}

 

 沉思片刻:java线程类实现直接继承Thread类看似简单一点,但是java只支持单继承,而可以实现多个接口,所以,如果该业务类需要继承一个父类来实现某种功能,使用实现Runnable接口的方式去实现线程类是非常方便的。

 

二、AtomicBoolean用原子方式更新的 boolean 值

import java.util.concurrent.atomic.AtomicBoolean;

/**
 * 用原子方式更新的 boolean值实例
 * @author  Walter.Huang
 * @create date 2014-12-8
 */
public class Worker implements Runnable  {
	
	private String name;
	public static AtomicBoolean atomicBoolean =new AtomicBoolean(false);

	public Worker(String wkName){
		setName(wkName);
	}
	
	public String getName() {
		return name;
	}

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

	public static void main(String[] args) {
		Worker w1=new Worker("w1");
		new Thread(w1).start();//启动线程

		Worker w2=new Worker("w2");
		new Thread(w2).start();//启动线程

		Worker w3=new Worker("w3");
		new Thread(w3).start();//启动线程
	}

	@Override
	public void run() {
		if(atomicBoolean.compareAndSet(false, true)){
			System.out.println(this.getName()+"开工!");
			try {
				System.out.println(this.getName()+"工作ing>>>");
				Thread.sleep(3000);
			} catch (InterruptedException e) {
			}
			System.out.println(this.getName()+"收工!");
			atomicBoolean.set(false);
		}else{
			System.out.println("已经有个在工作了!"+this.getName()+"不可以工作");
		}
	}
	
	
}

 

运行结果:

  w1开工!

  已经有个在工作了!w3不可以工作

  已经有个在工作了!w2不可以工作

  w1工作ing>>>

 

  w1收工!

 

 

 

你可能感兴趣的:(java)