关于java线程类 博客分类: java java
程序员文章站
2024-03-21 21:30:16
...
关于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收工!
推荐阅读
-
3p0连接mysql经常断开连接解决方案 博客分类: java
-
关于java线程类 博客分类: java java
-
例说java枚举类型 博客分类: java java枚举
-
例说java常用日志管理 博客分类: java log
-
3p0连接mysql经常断开连接解决方案 博客分类: java
-
【java之Undertow介绍】 博客分类: Undertow 【java之Undertow介绍】
-
jar包中资源文件的读取 博客分类: java Jar
-
抽象类和接口的区别,使用场景 博客分类: java java抽象类接口
-
匿名内部类及Threadlocal 类的使用 博客分类: java java类
-
Java异常处理总结(一) 博客分类: java java异常exception