Java多线程实现方案

Java多线程的两种实现方案

   首先,我们知道Java多线程实现的两种方案分别为:
   1、继承Thread类 
   2、实现Runnable接口

一、继承Thread实现多线程

   直接看代码实现:
package com.example.thread.one;

public class ThreadDemo {
	public static void main(String[] args) {
		MyThread mThread = new MyThread();//新建线程
		mThread.start();//线程处于就绪状态,拿到时间片后会自动执行run()方法里面的代码块
	}
	
}
class MyThread extends Thread{
	@Override
	public void run() {
		super.run();
		/**
		 * 这里写需要在子线程中执行的
		 * 比较耗时的操作。
		 */
		System.out.println("子线程执行了比较耗时的操作");
	}
}

问题1、为什么要重新run()方法?
因为run()方法里面封装的是要被该线程执行的代码
问题2、run()方法和start()方法的区别?
 如果直接调用run()方法就是普通的方法调用,调用start()方法是先启动线程,获取到cpu执行权后由JVM调用其中的run()方法

二、实现Runnable接口实现多线程

   直接看代码实现过程:
package com.example.thread.one;

public class ThreadDemo {
	public static void main(String[] args) {
		MyRunnable mRunnable = new MyRunnable();
		//创建线程,需要传入一个Runable对象作为参数
		Thread thread = new Thread(mRunnable);
		//线程处于就绪状态,如果分配到时间片会自动执行Runnable中的run()方法
		thread.start();
	}
	
}
class MyRunnable implements Runnable{

	@Override
	public void run() {
		/**
		 * 这里写需要在子线程中执行的
		 * 比较耗时的操作。
		 */
		System.out.println("子线程执行耗时操作");
	}
	
}

三、两种实现方法的区别

   实现Runnable接口带来的好处:
1、避免JAVA单继承带来的局限性。
   由于JAVA是单继承的,如果当前自定义的类已经继承了一个类,就不能再继承Thread类来实现多线程了,但是,我们可以通过实现Runnable来避免这个局限性,同时JAVA还是多实现的,可以同时实现多个接口,因此实现Runnable接口更加的方便。
2、适合多个相同的程序代码去处理同一个资源的情况,把线程同程序的代码、数据有效的分离,较好的体现面向对象的设计思想。
   当多个线程需要处理同一资源时,我们可以将资源在Runnable接口中定义,这样,创建Thread对象时传入相同的Runnable对象就可以实现多线程资源的共享(注:这里需要考虑多线程的线程安全问题,需要考虑同步的问题)
例如下面的代码:
package com.example.thread.one;

public class ThreadDemo {
	public static void main(String[] args) {
		MyRunnable mRunnable = new MyRunnable();
		//创建线程,这里两个线程传入相同的Runnable对象
		Thread thread1 = new Thread(mRunnable);
		Thread thread2 = new Thread(mRunnable);
		
		//线程处于就绪状态,如果分配到时间片会自动执行Runnable中的run()方法
		thread1.start();
		thread2.start();
	}
	
}
class MyRunnable implements Runnable{
	//被多个线程共享的资源
	private int count = 100;
	@Override
	public void run() {
		for (int i = 0; i < 50; i++) {
			System.out.println("当前的count值:" + count--);
		}
	}
	
}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值