开启多线程的方法

10人阅读 评论(0) 收藏 举报
分类:

要开启一个多线程有两种方法:

1、继承 Thread 类

通过继承 Thread 类的方式实现多线程有4个步骤:

<1>create 一个类,让它继承 Thread 类

<2>重写 Thread 类里面的 run 方法,把需要执行的代码块放在 run 方法体内

<3>在主线程(主程序)内创建该类的对象

<4>用该对象调用 start 方法

例子:

package multiThread;

public class jichengThread {
	
	public static void main(String[]args){
		myThread mt = new myThread();
		mt.start();
		for(int i=0;i<1000;i++)
			System.out.println("主线程程序在执行.......");
	}
	
}

class myThread extends Thread{
	public void run(){
		for(int i=0;i<1000;i++)
			System.out.println("子线程程序在执行.......");
	}
}

执行结果:可以看到两个线程在同时执行


但是有时候即使开启了一个多线程(开启多线程就是CPU在执行主程序的时候,同时分配一些空间执行子程序),但是还是看不到两个线程在同时执行,那有可能是主线程的程序执行时间太短,没有看到交替执行的结果,比如在 for 循环里面把循环的次数减小到10,就看不到交替执行的结果,但其实还是多线程

除了创建两个类之外,还可以用匿名内部类的方式继承 Thread 类,重写 Thread 里面的run 方法,调用 start() 方法,实现多线程,如下:

(匿名内部类就是创建一个类的对象,并不给其赋给对应的引用,如下面的 new Thread() 创建了一个 Thread 的对象,米有给其赋给一个引用,而 new Thread 后面跟小括号、大括号,表示该类继承Thread类,并创建了一个Thread类的子类对象,里面的 run 方法表示重写该方法,最终相当于创建了一个 Thread 类的对象,再调用 start 方法执行线程)

package multiThread;

public class nimingneibuleishixian {

	public static void main(String[] args) {
		new Thread(){
			@Override
			public void run() {
				for(int i=0;i<1000;i++)
					System.out.println("子线程在执行....");
			}
		}.start();
		
		for(int i=0;i<1000;i++){
			System.out.println("主线程在执行....");
		}
	}
}
运行结果:


2、实现 Runable 接口

通过该方法实现多线程的步骤如下:

<1>创建一个类,实现Runnable 接口

<2>重写 run 方法(注意:run 方法是 Runnable 接口里面唯一的方法,Thread 类也是实现了 Runnable 接口)

<3>创建该类的一个对象

<4>调用 Thread 类的有参构造,把上一步创建的对象作为参数传递,创建 Thread 类的一个对象

<5>调用该对象的 start 方法

例子:

package multiThread;

public class shixianRunable {

	public static void main(String[] args) {
		
		myRunable mr = new myRunable();
		Thread t = new Thread(mr);
		t.start();
		for(int i=0;i<1000;i++)
			System.out.println("主线程程序在执行....");
	}
}

class myRunable implements Runnable{
	
	public void run(){
		for(int i=0;i<1000;i++)
			System.out.println("子线程程序在执行.....");
	}
}

同样也可以使用匿名内部类实现 Runnable 接口的方式实现多线程:

package multiThread;

public class nimingneibuleishixian {

	public static void main(String[] args) {
	
		//创建一个 Thread 的子类对象
		new Thread(  //把这里面的东西作为 Thread 的构造参数传入进去
			new Runnable(){
				@Override
				public void run() {
				for(int i=0;i<1000;i++)
					System.out.println("子线程在执行....");
				}
			}
		).start();
		for(int i=0;i<1000;i++){
			System.out.println("主线程在执行....");
		}
		
		
	}
}

由于用 new Runnable() 的方式是创建的 Runnable 的子类对象,但是 Runnable 的子类对象里面没有 start 方法,该方法只在 Thread 里面有,所以要把其作为一个参数传递给 Thread 的构造函数,再调用 start 开启线程


**对实现 Runnable 方式创建线程的一点理解:

编译的时候,调用的是 Runnable 接口里面的方法,在实际运行的时候,调用的是 myRunnable 里面的方法

在实际应用中,由于java 不支持多继承,所以当一个类没有继承一个父类的时候,应该优先考虑使用继承 Thread 类的方式,因为这种方式简单,如果继承了其他的父类,就要用实现 Runnable 接口的方式了

查看评论

Python-多线程

多线程多进程深度学习
  • 2017年08月21日 15:17

开启线程的几种方法使用

第一,使用Handler 以下是一个对话框不断增加的过程 public class MainActivity extends Activity { ProgressBar pb1, pb2; ...
  • qq_31307919
  • qq_31307919
  • 2016-07-05 17:43:24
  • 3473

java创建启动多线程的三种方式

线程的创建和启动    java使用Thread代表线程,所有的对象都是Thread类或其之类的实例 使用继承Tread类来启动多线程的基本步骤:   1.创建Thread类的子类,并重写run()方...
  • x605940745
  • x605940745
  • 2013-10-24 11:08:50
  • 3638

创建和启动线程的两种方式

方式1:继承Thread类 步骤: 1):定义一个类A继承于java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:...
  • caidie_huang
  • caidie_huang
  • 2016-10-07 10:52:48
  • 16006

JAVA多线程——多线程的几种实现方法详解

转自:http://blog.csdn.net/jspamd/article/details/5262894 随着计算机技术的发展,编程模型也越来越复杂多样化。但多线程编程模型是目前计算机系统架构的...
  • xuxiaoxie
  • xuxiaoxie
  • 2016-05-04 16:47:34
  • 2775

C# 开启线程几种方式

通过Thread发起线程,,,using System; using System.Collections.Generic; using System.Linq; using System.Text;...
  • Czhenya
  • Czhenya
  • 2017-10-13 22:02:57
  • 347

java开启新线程的三种方法

见:http://blog.csdn.net/caidie_huang/article/details/52748460 见:http://blog.csdn.net/typename/article...
  • u011314442
  • u011314442
  • 2017-02-28 09:12:51
  • 5677

【Java多线程】ThreadPoolExecutor线程池讲解

背景 如果我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降...
  • elricboa
  • elricboa
  • 2017-12-19 10:52:09
  • 121

Java8多线程的启动方法

一、进程与线程的区别 总:操作系统执行多任务,每个任务就是进程;进程执行多任务,每个任务就是线程;包含关系 分: 1.调度性:在引入线程的OS中,把线程作为调度和分派的基本单位,把进程作为资源拥...
  • s1143671457
  • s1143671457
  • 2017-11-24 21:57:30
  • 837

android开启线程的几种方式

android开启线程的几种方式
  • allbule
  • allbule
  • 2016-10-10 22:42:45
  • 194
    个人资料
    持之以恒
    等级:
    访问量: 16万+
    积分: 2062
    排名: 2万+
    最新评论