[线程]——三种方式.创建线程
2016-04-10 16:02
393 查看
第一种:
/** * 1\模拟龟兔赛跑 继承Thread+重写RUN(线程体) * 2\使用线程:创建子类对象+对象.strat() 线程启动 * @author Administrator * */ public class Rabbits extends Thread{ @Override public void run() { //线程体 for(int i=0;i<2000;i++){ System.out.println("兔子跑了"+i+"步"); } } } class Tortoise extends Thread{ @Override public void run() { //线程体 for(int i=0;i<2000;i++){ System.out.println("乌龟跑了"+i+"步"); } } }
public class app { public static void main(String[] args) { //创建子类对象 Rabbits rab=new Rabbits(); Tortoise tor=new Tortoise(); //调用start()方法 tor.start(); rab.start();//不要调用run方法 for (int i = 0; i < 2000; i++) { System.out.println("main==>"+i); } } }第二种:
/** * 推荐使用Runnable创建线程 * 1、避免单继承的局限性 * 2、便于共享资源 * 使用Runnable创建线程 * 1、类 实现Runnable接口+重写Run方法 ---->真实角色 * 2、启动多线程 使用静态代理 * 1)创建真实角色 * 2)创建代理角色+真实角色引用 * 3)调用.strat()启动线程 * @author Administrator * */ public class Programmer implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("要好好干!"); } } }
public class ProgrammerApp { public static void main(String[] args) { //1)、创建真实角色 Programmer pro =new Programmer(); //2)、创建代理角色 +真实角色引用 Thread proxy =new Thread(pro); //3)、调用 .start() 启动线程 proxy.start(); for(int i=0;i<1000;i++){ System.out.println("一边聊qq...."); } } }第三种:
/** * 使用Callable创建线程 * @author Administrator * */ public class Call { public static void main(String[] args) throws InterruptedException, ExecutionException { //创建线程 ExecutorService ser=Executors.newFixedThreadPool(2); Race tortoise = new Race("老不死",1000); Race rabbit = new Race("小兔子",500); //获取值 Future<Integer> result1 =ser.submit(tortoise) ; Future<Integer> result2 =ser.submit(rabbit) ; Thread.sleep(10000); //2秒 tortoise.setFlag(false); //停止线程体循环 rabbit.setFlag(false); int num1 =result1.get(); int num2 =result2.get(); System.out.println("乌龟跑了-->"+num1+"步"); System.out.println("小兔子跑了-->"+num2+"步"); //停止服务 ser.shutdownNow(); } } class Race implements Callable<Integer>{ private String name ; //名称 private long time; //延时时间 private boolean flag =true; private int step =0; //步 ///////////////////////////////////// public Race() { } public Race(String name) { super(); this.name = name; } public Race(String name,long time) { super(); this.name = name; this.time =time; } //////////////////////////////////// @Override public Integer call() throws Exception { while(flag){ Thread.sleep(time); //延时 step++; } return step; } //////////////////////////////////////////////////// public String getName() { return name; } public void setName(String name) { this.name = name; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public int getStep() { return step; } public void setStep(int step) { this.step = step; } }
/** * 方便共享资源 * @author Administrator * */ public class ticket12306 implements Runnable{ private int num=500; @Override public void run() { while(true){ if (num<=0) { break;//跳出循环 } System.out.println(Thread.currentThread().getName()+"抢到了--》"+num--); } } public static void main(String[] args) { //真实角色 ticket12306 web=new ticket12306(); //代理 Thread Tom=new Thread(web, "张三"); Thread Jess=new Thread(web, "李四"); Thread Chois=new Thread(web, "王二"); //启动线程 Tom.start(); Jess.start(); Chois.start(); } }
相关文章推荐
- android使用handlerthread创建线程示例
- java线程(1)——三种创建线程的方式
- 【C/C++多线程编程之三】创建pthread线程
- java中线程的创建
- java创建运行线程Thread
- 创建线程的两种方式
- 线程 NSThread 创建线程
- 线程 队列 创建线程
- pthread_create
- Java多线程初学者指南(2):用Thread类创建线程
- Java多线程初学者指南(3):使用Runnable接口创建线程
- 创建并启动线程
- Java总结(十)—实现Runnable接口创建线程,线程安全同步,死锁(哲学家进餐问题),读写锁
- 创建线程的方法
- java创建线程
- Java并发编程:(1)进程和线程的由来、进程的创建、线程的创建
- java中创建线程的方法
- windows线程的相关概念
- MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
- 创建新进程,然后等待结果