java多线程有几种实现方法,都是什么?
转自:http://www.cnblogs.com/liujichang/p/3150387.html
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方法有两种,分别是synchronized,wait与notify
先看一下java线程运行时各个阶段的运行状态
java实现多线程有两种方法
1、继承Thread类
2、实现Runnable接口
这两种方法的共同点:
不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。
两种方法的不同点:
1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承
2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性
基于以上两点所以建议用第二种方法
 package cn.itcast.demo1;
 public 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 + "----->运行");
         }
     }
 }
 package cn.itcast.demo1;
 public class Demo5 {
     public static void main(String[] args) {
         Runnable r1 = new MyThread("线程一");
         Runnable r2 = new MyThread("线程二");
         Runnable r3 = new MyThread("线程三");
         Thread t1 = new Thread(r1);
         Thread t2 = new Thread(r2);
         Thread t3 = new Thread(r3);
         t1.start();
         t2.start();
         t3.start();
     }
 }
 package cn.itcast.demo1;
 public class Demo6 {
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         MyThread mt1 = new MyThread("线程A");
         MyThread mt2 = new MyThread("线程B");
         MyThread mt3 = new MyThread("线程C");
         mt1.start();
         mt2.start();
         mt3.start();
     }
 }
这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程
第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程
程序2:
 package cn.itcast.demo1;
 public class MyThread1 implements Runnable {
     private int ticket = 10;
     @Override
     public void run() {
         // TODO Auto-generated method stub
         for(int i = 0; i < 500;i++){
             if(this.ticket > 0){
                 System.out.println("卖票------》" + (this.ticket--));
             }
         }
     }
 }
 package cn.itcast.demo1;
 public class Demo7 {
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         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多线程有几种实现方法,都是什么?的更多相关文章
- java多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
		多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 先看一下java线程运行时各个阶段的运行状态 j ... 
- Java多线程【三种实现方法】
		java多线程 并发与并行 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行 并行:一组程 ... 
- java多线程有几种实现方法?线程之间如何同步
		java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口: 同步的实现方法有五种:1.同步方法:2.同步代码块:3.使用特殊域变量(volatile)实现线程同步:4 ... 
- 【Java面试题】26  多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
		问题一:多线程有几种实现方法?同步有几种实现方法? 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与not ... 
- Java多线程的三种实现方式
		java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ... 
- java多线程的几种实现方式
		java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ... 
- 阿里巴巴--java多线程的两种实现方式,以及二者的区别
		阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ... 
- java oracle的2种分页方法
		java oracle的2种分页方法 一物理分页: <!-- 分页查询所有的博客信息 --> <select id="findBlogs" resultType= ... 
- 【Java多线程】两种基本实现框架
		Java多线程学习1——两种基本实现框架 一.前言 当一个Java程序启动的时候,一个线程就立刻启动,改程序通常也被我们称作程序的主线程.其他所有的子线程都是由主线程产生的.主线程是程序开始就执行的, ... 
随机推荐
- hd acm2035
			求A^B的最后三位数表示的整数.说明:A^B的含义是“A的B次方” 思路:后三位只跟后三位相乘有关,所以可以每乘一次都对1000取余. 代码: #include <stdio.h>#inc ... 
- LINQ 学习路程 --  查询操作 Average Count Max Sum
			IList<, , }; var avg = intList.Average(); Console.WriteLine("Average: {0}", avg); IList ... 
- Ogre的Singleton实现-模版实现,便于重用-(详细分析)以及笔者的改进
			转自:http://www.cppblog.com/sandy/archive/2005/11/30/1436.html ;Root g_root;//must declare once only / ... 
- HDU5371 Hotaru's problem
			本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ... 
- cpu架构
			转自 http://blog.csdn.net/wyzxg/article/details/5027738 CPU架构 Architecture ,结构.架构,这个词用于 CPU 的时候是指 CPU ... 
- django 实现分页功能
			分页效果: 视图代码: # -*- coding: utf-8 -*- from django.shortcuts import render,get_object_or_404 from djang ... 
- node.js+express+jade系列七:富文本编辑框的使用
			下载nicEdit富文本编辑框, 把nicEdit.js文件放到public/javascripts/下 新建jade文件:代码如下 doctype htmlhtml head t ... 
- 防止未登录用户操作—struts2拦截器简单实现(转)
			原文地址:http://blog.csdn.net/zhutulang/article/details/38351629 尊重原创,请访问原地址 一般,我们的web应用都是只有在用户登录之后才允许操作 ... 
- Java_数据交换_dom4j_01_解析xml
			1.说明 详细原理以后再研究,先将例子存着 2.代码 2.1 xml内容 <?xml version="1.0" encoding="UTF-8"?> ... 
- leetcode 7 Reverse Integer(水题)
			so easy,注意一下输入不爆int但是反转以后可能爆int. class Solution { public: int gao(int w){ ) ; else{ ; while(w--){ an ... 
