多线程的实现方式

方式一:继承Thread类

package com.cvicse.thread.demo;

/**
 * 多线程实现一:继承Thread类
 * @author 13169
 *
 */
class MyThread extends Thread{
	private String name ;
	private int ticket =10;
	public MyThread() {
		
	}
	public MyThread(String name) {
		this.name=name;
	}
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			if(ticket>0) {
				System.out.println(Thread.currentThread().getName()+" 卖票:"+this.ticket--);
			}
		}
	}
}
public class ThreadDemo {
 
	public static void main(String[] args) {
		MyThread mt1 = new MyThread("A线程");
		MyThread mt2 = new MyThread("B线程");
		MyThread mt3 = new MyThread("C线程");
		//线程启动
		mt1.start();
		mt2.start();
		mt3.start();
		
		/**
		 * 使用Thread类的start()方法不仅仅要启动多线程的执行代码,
		 * 还要去根据不同的操作系统进行资源的分配
		 * 
		 * 线程的运行不是像其他方法那么简单的调用一下就运行的。
		 * 想要运行一个线程,肯定是要和操作系统打交道,告诉操作系统我要添加一个线程,
		 * run方法只是个简单的方法,里面就是你要运行的代码。
		 * start方法里面会调用一个native方法,这个方法才是真正和操作系统交流的
		 */
	}

}

方式二:实现Runnable接口 数据共享

package com.cvicse.thread.demo;

/**
 * 多线程实现方式二:实现Runnable接口  数据共享
 * @author 13169
 *
 */
class MyRunnableThread implements Runnable{
	private int ticket =10;
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			if(ticket>0) {
				//取得当前线程对象Thread.currentThread()
				System.out.println(Thread.currentThread().getName()+" 卖票:"+this.ticket--);
			}
		}
	}
}
public class RunnableDemo {

	public static void main(String[] args) {
		
		MyRunnableThread mt = new MyRunnableThread();
		//线程启动 多个线程对象访问同一资源
		new Thread(mt,"A线程").start();
		new Thread(mt,"B线程").start();
		new Thread(mt,"C线程").start(); 
	}

}

方式三:实现Callable接口

package com.cvicse.thread.demo;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 *  多线程实现三:实现Callable接口
 * @author 13169
 *
 */
public class CallableThreadDemo implements Callable<String>{

	private int ticket = 10;
	@Override
	public String call() throws Exception {
		for (int i = 0; i < 100; i++) {
			if(this.ticket>0) {
				System.out.println(Thread.currentThread().getName()+" 卖票: "+this.ticket--);
			}
		}
		return "票已卖光";
	}
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		CallableThreadDemo ct = new CallableThreadDemo();
		/**
		 * FutureTask可以接收Callable接口对象
		 * FutureTask是Runnable的子类
		 */
		FutureTask<String> ft1 = new FutureTask<String>(ct);
		FutureTask<String> ft2 = new FutureTask<String>(ct);
		new Thread(ft1).start();
		new Thread(ft2).start();
		System.out.println(ft1.get());
		System.out.println(ft2.get());
		/*每一个JVM进程启动时候至少启动两个线程
		 * (1)main线程:程序的主要执行,以及启动子线程
		 * (2)gc线程:负责垃圾收集
		 * */
	}
}

方式四:匿名内部类

package com.cvicse.thread.demo;

/**
 * 多线程的实现四:匿名内部类
 * @author 13169
 *
 */
public class InnerClassThreadDemo {

	public static void main(String[] args) {

		Thread t1 =new Thread(new Runnable() {
			private int ticket =10;
			@Override
			public void run() {
				for (int i = 0; i < 10; i++) {
					if(ticket>0) {
						//取得当前线程对象Thread.currentThread()
						System.out.println(Thread.currentThread().getName()+" 卖票:"+this.ticket--);
					}
				}
			}
		});
		//启动多线程
		t1.start();
	}

}

方式五:使用线程池创建线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值