JAVA多线程之多线程的实现
2016-05-13 11:05
399 查看
java实现多线程有两种方式:
继承Thread类并重写run方法;
实现Runnable接口.
Thread类是专门用来创建线程和对线程进行操作的类。当某个类继承了Thread类之后,该类就叫做一个线程类。
两种方法均需执行线程的start()方法为线程分配必须的系统资源、调度线程运行并执行线程的run()方法。
start()方法是启动线程的唯一的方法。start()方法首先为线程的执行准备好系统资源,然后再去调用run()方法。一个线程只能启动一次,再次启动就不合法了。
run()方法中放入了线程的工作,即我们要这个线程去做的所有事情。缺省状况下run()方法什么也不做。
在具体应用中,采用哪种方法来构造线程要视情况而定。通常,当一个线程已经继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。下面是实例:
通过继承Thread类实现多线程的方式,使用时只需生成该类的对象,然后调用start()即可
停止线程推荐的方式:设定一个标志变量,由该标志变量控制循环是继续执行还是跳出.
继承Thread类并重写run方法;
实现Runnable接口.
Thread类是专门用来创建线程和对线程进行操作的类。当某个类继承了Thread类之后,该类就叫做一个线程类。
两种方法均需执行线程的start()方法为线程分配必须的系统资源、调度线程运行并执行线程的run()方法。
start()方法是启动线程的唯一的方法。start()方法首先为线程的执行准备好系统资源,然后再去调用run()方法。一个线程只能启动一次,再次启动就不合法了。
run()方法中放入了线程的工作,即我们要这个线程去做的所有事情。缺省状况下run()方法什么也不做。
在具体应用中,采用哪种方法来构造线程要视情况而定。通常,当一个线程已经继承了另一个类时,就应该用第二种方法来构造,即实现Runnable接口。下面是实例:
继承Thread类
public class TestThread1 { public static void main(String[] args) { // TODO Auto-generated method stub Thread thread1 = new Thread1(10); Thread thread2 = new Thread2(10); thread1.start(); thread2.start(); } } class Thread1 extends Thread{ int times; public Thread1(int times){ this.times = times; } @Override public void run(){ int i = 0; while(i < this.times){ System.out.println("I am Thread1"); i += 1; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Thread2 extends Thread{ int times; public Thread2(int times){ this.times = times; } @Override public void run(){ int i = 0; while(i < this.times){ System.out.println("I am Thread2"); i += 1; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
通过继承Thread类实现多线程的方式,使用时只需生成该类的对象,然后调用start()即可
实现Runnable接口
public class TestThread1 { public static void main(String[] args) { // TODO Auto-generated method stub Thread thread1 = new Thread(new Thread1(10)); Thread thread2 = new Thread(new Thread2(10)); thread1.start(); thread2.start(); } } class Thread1 implements Runnable{ int times; public Thread1(int times){ this.times = times; } @Override public void run(){ // TODO Auto-generated method stub int i = 0; while(i < this.times){ System.out.println("I am Thread1"); i += 1; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class Thread2 implements Runnable{ int times; public Thread2(int times){ this.times = times; } @Override public void run() { // TODO Auto-generated method stub int i = 0; while(i < this.times){ System.out.println("I am Thread2"); i += 1; try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }通过实现runnable接口实现多线程,在使用的时候,首先要生成自定义的多线程对象,然后将该对象作为参数实例化一个Thread对象,再由该对象调用start方法启动.
关于如何终止线程
线程的消亡不能通过调用stop()命令,而是让run()方法自然结束。stop()方法是不安全的,已经废弃.停止线程推荐的方式:设定一个标志变量,由该标志变量控制循环是继续执行还是跳出.
相关文章推荐
- Description Resource Path Location Type Java compiler level does not match the version of the instal
- java实现插入排序,增加减少循环的功能
- java发送邮件常见问题(附源代码)
- java实现冒泡排序,设立标志位,减少遍历趟数
- springmvc返回json中文乱码及使用jackson自动转换
- java中截取字符串第二个小数点之前的字符串
- spring 下载地址
- Java进阶读书清单及好书推荐
- mysql连接错误java.sql.SQLException: Unknown system variable 'language'
- Eclipse平台下Android SDK Manager不显示没有安装的程序扩展(不能在Eclipse平台下安装虚拟机)
- Java 类中各成分加载顺序 和 内存中的存放位置
- Java二叉树(三)--非递归的中序_先序_后序遍历二叉树
- Java | AWT Swing
- MyBatis与Spring、SpringMVC整合
- pojo和javaBean的区别
- spring AOP使用
- Struts2 中,相同的验证规则,如何使用同一条异常响应信息,及动态调用各自对应的名称?
- java实现归并排序
- java实现堆排序
- java命名规范