多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

先看一下java线程运行时各个阶段的运行状态

java实现多线程有两种方法

1、继承Thread类

2、实现Runnable接口

这两种方法的共同点:

不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。

两种方法的不同点:

1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承

2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

基于以上两点所以建议用第二种方法

下面用例子来做说明

程序1:

package com.dr.runnable1;

//一个类只要继承了Thread类,则此类就是多线程类

class MyThread extends Thread

{

private String name;

public MyThread(String name)

{

this.name=name;

}

//如果要使用多线程,则必须有一个方法的主体

public void run()

{

//打印输出

for(int i=0;i<10;i++)

{

System.out.println(this.name+"----->运行、、、、");

}

}

}

public class Demo1 {

public static void main(String args[])

{

//第一种方法

Runnable r1=new MyThread("线程A");

Runnable r2=new MyThread("线程B");

Runnable r3=new MyThread("线程C");

Thread t1=new Thread(r1);

Thread t2=new Thread(r2);

Thread t3=new Thread(r3);

t1.start();

t2.start();

t3.start();

//        mt1.run();//线程执行,使用start方法

//        mt2.run();

//        mt3.run();

//第二种方法

//       MyThread mt1=new MyThread("线程A");

//        MyThread mt2=new MyThread("线程B");

//        MyThread mt3=new MyThread("线程C");

//        mt1.start();

//        mt1.start();//线程只能启动一次

//        mt2.start();

//        mt3.start();

}

}

程序的运行结果是:

这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程

第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程

程序2:

package com.dr.runnable1;

class MyThread1 implements Runnable

{

private  int ticket=10;

public void run()

{

for(int i=0;i<500;i++)

{

if(this.ticket>0)

{

System.out.println("卖票----->"+(this.ticket--));

}

}

}

}

public class Demo2 {

public static void main(String args[])

{

MyThread1 mt=new MyThread1();

Thread t1=new Thread(mt);

Thread t2=new Thread(mt);

Thread t3=new Thread(mt);

t1.start();

t2.start();

t3.start();

}

}

程序运行结果:

这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。

java多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?的更多相关文章

  1. Java多线程并发01——线程的创建与终止,你会几种方式

    本文开始将开始介绍 Java 多线程与并发相关的知识,多谢各位一直以来的关注与支持.关注我的公众号「Java面典」了解更多 Java 相关知识点. 线程的创建方式 在 Java 中,用户常用的主动创建 ...

  2. java 多线程总结篇3之——生命周期和线程同步

    一.生命周期 线程的生命周期全在一张图中,理解此图是基本: 线程状态图 一.新建和就绪状态 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Jav ...

  3. Java多线程面试题:线程锁+线程池+线程同步等

    1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...

  4. java多线程上篇(二) -- 进程的控制、同步

    一.进程的控制 进程的基本数据信息是操作系统控制管理进程的数据集合,这些信息就是用来控制进程的,此处我们说的进程控制就是进程的管理. 比如进程有状态,那么进程的创建.终止,状态的切换,这都不是进程自主 ...

  5. Java多线程并发编程之原子变量与非阻塞同步机制

    1.非阻塞算法 非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 -- 例如比较和交换.非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞 ...

  6. Java多线程并发02——线程的生命周期与常用方法,你都掌握了吗

    在上一章,为大家介绍了线程的一些基础知识,线程的创建与终止.本期将为各位带来线程的生命周期与常用方法.关注我的公众号「Java面典」了解更多 Java 相关知识点. 线程生命周期 一个线程不是被创建了 ...

  7. Java多线程并发05——那么多的锁你都了解了吗

    在多线程或高并发情境中,经常会为了保证数据一致性,而引入锁机制,本文将为各位带来有关锁的基本概念讲解.关注我的公众号「Java面典」了解更多 Java 相关知识点. 根据锁的各种特性,可将锁分为以下几 ...

  8. Java多线程编程详解

    转自:http://programming.iteye.com/blog/158568 线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Ja ...

  9. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

随机推荐

  1. Django:之CMDB资源系统

    渐谈CMDB需要内容,ITIL.CMDB介绍.Django自定义用户认证.Restful规范.资产管理功能开发. ITIL介绍 TIL即IT基础架构库(Information Technology I ...

  2. web前端与后端

    Web前端:     1)精通HTML,能够书写语义合理,结构清晰,易维护的HTML结构.     2)精通CSS,能够还原视觉设计,并兼容业界承认的主流浏览器.     3)熟悉JavaScript ...

  3. PHP的反射机制【转载】

    PHP5添加了一项新的功能:Reflection.这个功能使得phper可以reverse-engineer class, interface,function,method and extensio ...

  4. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  5. 编译在android 平台上跑的C应用程序

    Android 用的是 Bionic C, 而不是通常的glibc,因此简单使用交叉工具链并不能够编译出适合运行在android 设备上的 C/C++ 程序. 交叉工具链可以很轻松在 Android ...

  6. Python定制类

    https://docs.python.org/3/reference/datamodel.html#special-method-names

  7. linux系统定时重启tomcat

    #touch auto-start.sh [root@Linux opt]# echo $LANGen_US.UTF-8 #vim auto-start.sh #!/bin/sh export LAN ...

  8. ARP/代理ARP

    1.ARP首先讲到ARP,ARP是地址解析协议,它的作用是在以太网环境下,通过3层的IP地址来找寻2层的MAC地址,得到一张ARP缓存表.转发数据的时候根据ARP缓存表来进行传输.下图详细说明数据传输 ...

  9. vbs 解析html文档的方法

    vbs 解析html文档的方法(htmlfile) 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载 时间:2014-06-18我要评论 关于VBS采集,网上流行比较多的方法都是正则,其实 h ...

  10. WordPress安装到zen-cart产品页中

    把WordPress安装到zen-cart一个子目录里吧,设置好固定连接等这个文件/includes/templates/template_default/templates/tpl_product_ ...