一、创建线程的第一种方式:继承Thread类

class Demo extends Thread{
@Override
public void run() {
super.run();
for(int i=0;i<20;i++)
System.out.println(Thread.currentThread()+"...."+i);
}
} public class ThreadDemo1 {
public static void main(String[] args){
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.start();
d2.start();
}
}

二、创建线程的第二种方式:实现Runnable接口

class Demo2 implements Runnable{
public void run() {
for(int i=0;i<20;i++)
System.out.println(Thread.currentThread()+"..."+i);
}
} public class ThreadDemo2 {
public static void main(String[] args) {
Thread t1 = new Thread(new Demo2());
Thread t2 = new Thread(new Demo2());
t1.start();
t2.start(); }
}

Runnable的出现仅仅是将线程的任务进行了对象的封装。

实现Runnable接口的好处:

1、将线程的任务从线程的子类中分离出来,进行单独的封装。按照面向对象的思想将任务封装成对象。

2、避免了Java单继承的局限性

所以第二种方法创建线程比较常用。

最新文章

  1. Linux0.11内核--系统调用机制分析
  2. CallBack实践。
  3. Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode
  4. 面试经验(SG)
  5. Oracle DataGuard 物理Standby 搭建(上)
  6. 一个提供jsp免费空间的站点
  7. 优盘文件系统(FOR C)
  8. 使用Charles Proxy提升iOS开发效率
  9. 冒泡排序的python代码实现
  10. [LeetCode] Maximum Vacation Days 最大化休假日
  11. C++ Primer 有感(重载操作符)
  12. 【转】Python爬取AES加密的m3u8视频流的小电影并转换成mp4
  13. c++ 开源库介绍和安装
  14. [wx]雪落香杉树人物关系图
  15. 20180307-Xen、KVM、VMware、hyper-v等虚拟化技术的比较
  16. Tanks!Tutorial 学习
  17. Pandas DataFrame 数据选取和过滤
  18. 解决 listView gridView 与ScrollView嵌套时的冲突
  19. tomcat java变量环境设置
  20. C#指南,重温基础,展望远方!(9)C#接口

热门文章

  1. 如何使用ABAP代码反序列化JSON字符串成ABAP结构
  2. SQL语句关于时间的查询小心得,希望大家给点意见
  3. element-UI动态的循环生成Popover弹出框的方法
  4. 1、SpringBoot+Mybatis整合------简单CRUD的实现
  5. 工具类(为控件设置色值) - iOS
  6. ES6初识-函数扩展
  7. 使用Git将本地项目上传到码云
  8. 天气预报api-汇总
  9. 【Python3】操作文件,目录和路径
  10. cookie操作和代理