欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于java线程类 博客分类: java java 

程序员文章站 2024-03-21 21:34:40
...

关于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