标签:imp dex log str 实现 使用 com his 自己
首先我们需要知道什么是线程:是程序执行流的最小单元,包括就绪、阻塞和运行三种基本状态。
举个简单的例子:我们把生活中的两件事吃饭和写作业当作是两个线程,当你正在写作业的时候,爸妈叫你吃饭,你就直接去了,等吃完饭回来后再接着写作业。这就是相当于两个线程其中一个从运行状态转入就绪状态,另一个线程从就绪状态转入运行状态。
创建线程包括继承Thread类和实现Runnable接口两种方式(JDK5.0以后还包括了实现Callable等方式来实现线程,这里不做介绍,感兴趣的小伙伴可以自己查资料),下面介绍第一种创建线程的方式(通过继承Thread类):
1 package com.test.thread; 2 3 public class EasyThread extends Thread { 4 private String name; 5 public EasyThread(String name) { 6 this.name=name; 7 } 8 //重写父类Thread中的run方法 9 @Override 10 public void run() { 11 for (int i = 0; i <2; i++) { 12 System.out.println(name+"运行"+i); 13 try { 14 //随机设置休眠时间 15 sleep((int)Math.random()*10); 16 } catch (InterruptedException e) { 17 e.printStackTrace(); 18 } 19 } 20 }; 21 22 public static void main(String[] args) { 23 //创建一个线程 24 EasyThread thread1=new EasyThread("线程1"); 25 //启动线程(启动线程后会执行上面的run方法) 26 thread1.start(); 27 EasyThread thread2=new EasyThread("线程2"); 28 thread2.start(); 29 } 30 31 }
多次运行上述代码,查看运行结果,你会发现可能每次的输出结果可能与上次相同也可能不同。因为休眠时间不同,导致运行的结果不尽相同,可以好好体会一下。下面讲述第二种创建线程的方式(实现Runnable接口):
1 package com.test.thread; 2 3 public class ImpRunnable implements Runnable { 4 private String name; 5 6 public ImpRunnable(String name) { 7 this.name = name; 8 } 9 10 // 实现接口Runnable中的run方法 11 @Override 12 public void run() { 13 for (int i = 0; i < 2; i++) { 14 System.out.println(name + "运行" + i); 15 try { 16 // 随机设置休眠时间 17 Thread.sleep((int) Math.random() * 10); 18 } catch (InterruptedException e) { 19 e.printStackTrace(); 20 } 21 } 22 }; 23 24 public static void main(String[] args) { 25 // 创建线程并启动(与第一种方法略有不同) 26 new Thread(new ImpRunnable("线程1")).start(); 27 new Thread(new ImpRunnable("线程2")).start(); 28 } 29 }
以上即为实现线程的两种常用的方式,在使用多线程(多个人共同完成同一个任务)的时候我们一般用实现Runnable接口的方式,关于两者之间具体的区别感兴趣的小伙伴可以自行查阅资料
标签:imp dex log str 实现 使用 com his 自己
原文地址:http://www.cnblogs.com/xwlych/p/5988507.html