java-多线程-基本概念/四种种创建thread的方式

程序:是一段静态的代码;
进程:处于运行过程的程序,是动态的,是独立存在的,拥有自己的资源,自己的私有地址;多个进程可以在单个cpu上并发执行;
(并发性:同一时刻,只能有一条指令执行,在cpu快速切换的情况下看起来像同时执行;并行性:同一时刻多条指令在多个cpu上同时执行;)
线程:程序的一条执行路径;一个进程可以有多个线程;

因为硬件和操作系统的不同而采用不同的策略:共用的多任务操作策略;抢占式多任务操作策略(大多数采用这种,效率高);

三种线程的创建方式:
1. 继承Thread类:
需要注意的是,用继承thread的方法创建线程,多个线程之间无法共享线程类的实例变量;
public class threadtest extends Thread{
	@Override
	public void run() {
		//1.首先重写run方法,这里就是线程执行体;该线程要执行的代码
	}	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//2.创建该类-这里是theradtest的子类
		threadtest testthread = new threadtest();
		//3.调用.start()方法启动该线程;
		testthread.start();
	}
}
2.实现Runnable接口:
相对于上一种方法,没有单继承的局限性,可以多实现;而且多个线程可以共同操作共有的资源;
//1.创建一个实现了Runnable接口的类;
public class threadtest implements Runnable{
	@Override
	public void run() {
		//2.还是要重写run方法,这里就是线程执行体;该线程要执行的代码
		System.out.println(Thread.currentThread().getName());
	}	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//3.创建该类的实例;
		threadtest testthread = new threadtest();
		//4.把这个实例作为参数传入Thread的构造方法;new一个Thread类,这个类就是创建出来的线程类;
		Thread imtest = new Thread(testthread);
		//5.启动线程,还是必须调用start方法;
		imtest.start();
	}
}

3.使用Callable和Future 创建线程 :
这个方法还没用过。 不太懂。
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

//1.先实现一个Callable接口;
public class Threadtest1 implements Callable<Integer>{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//3.创建一个实现了Callable接口的类
		Threadtest1 threadtest1 = new Threadtest1();
		//4.用Future包装这个类
		FutureTask<Integer> task = new FutureTask<>(threadtest1);
		//5.包装之后的类作为参数传入Thread的构造函数
		Thread thread1 = new Thread(task);
		//6.调用start方法;
		thread1.start();
	}

	//2.重写call方法
	@Override
	public Integer call() throws Exception {
		// TODO Auto-generated method stub
		//这里相当于Thread的run方法,线程执行体
		System.out.println(Thread.currentThread().getName());
		return null;
	}

}


4.匿名方式:
public class Createway3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Thread test1 = new Thread(){
			public void run() {
				System.out.println("匿名类1");
		    	for (int i = 0; i < 1000; i++) {
					System.out.println("匿名类1:"+i);
				}
			}
		};
		
		Thread test2 = new Thread(){
			public void run() {
				System.out.println("匿名类2");
		    	for (int i = 0; i < 1000; i++) {
					System.out.println("匿名类2:"+i);
				}
			}
		};
		
		test1.start();
		test2.start();
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

obession

觉得有用可以打赏咖啡一杯~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值