并发的学习总结1----线程的概念以及创建方式

1. 线程和进程的概念

  • 进程的概念:进程是计算机中的程序关于某些数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。一般情况,在windows中一个exe运行的程序就是一个进程。
  • 线程的概念:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每个线程并行执行不同的任务。

2. 线程的创建方式

  • 线程的创建方式1:通过继承Thread类创建线程类
class MyThread extends Thread{
		@Override
		public void run() {
			//在此方法中写需要在线程中执行的代码
		}
	}
  • 线程的创建方式2:通过实现Runable接口创建线程类
class MyThread implements Runnable{
		@Override
		public void run() {
			//在此方法中写需要在线程中执行的代码
		}
	}
  • 线程的创建方式3:通过实现Callable接口创建线程类
/**
	 * V是泛型,这里的泛型传入的是你需要线程执行结束后返回的值
	 *
	 */
	class MyThread implements Callable<V>{
		
		@Override
		public V call() throws Exception {
			//在此方法中写需要在线程中执行的代码
			return V;//如果不需要获取线程结束后的返回值,这里可以为null
		}
		
	}

通过thread类和runable接口创建线程类的方式基本类似,都是在run方法中编写需要在线程中执行的业务,但是java是不支持继承多个类,但是支持实现多个个接口,所有这里推荐使用runable接口来创建线程类,这样会更加灵活。
通过thread类和runable接口创建的线程类是没有返回值的;通过callable接口创建的线程类,可以在线程结束后返回一个你需要值。但是,并不是所有地方都推荐用callable接口创建线程类,因为thread类和runable接口的使用方法(启动方式)更简单,callable相对麻烦点。

3. 线程的启动方式

  • 通过start()方法(只能针对通过thread类,这种方法有很多局限性,比如数据无法共享)
ublic class MyThead0002 {

	public static void main(String[] args) {
		MyThread myThread = new MyThread();
		myThread.start();//执行线程
	}

}
class MyThread extends Thread{
	@Override
	public void run() {
		
	}
}
  • 将创建的线程类传入Thread的构造函数中,然后再调用Thread.start()方法(只能针对通过thread类和runable接口创建的线程类)
public class MyThread001 {
	public static void main(String[] args) {
		MyThread mt = new MyThread();
		Thread t = new Thread(mt);//通过thread类创建的线程类和此方法一致
		t.start();//执行线程
	}	
}
class MyThread implements Runnable{
	@Override
	public void run() {
		
	}
}
  • 通过线程池的excute()方法(只能针对通过thread类和runable接口创建的线程类)
public class MyThread001 {
	public static void main(String[] args) {
		MyThread myThread = new MyThread();
		ExecutorService executor = Executors.newCachedThreadPool();
		executor.execute(myThread);//执行线程
	}	
}
class MyThread implements Runnable{
	@Override
	public void run() {
		
	}
}
  • 通过线程是的submit()方法(只能针对通过callable接口创建的线程类)
public class MyThread001 {
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		MyThread myThread = new MyThread();
		ExecutorService executor = Executors.newCachedThreadPool();
		Future<String> future = executor.submit(myThread);//执行线程
		String result = future.get();//获取线程执行结束后的返回值
		
	}	
}
class MyThread implements Callable<String>{

	@Override
	public String call() throws Exception {
		// TODO Auto-generated method stub
		return "";
	}
}

4. 线程的几种状态

  • 创建状态(初始状态):此状态表示创建好了线程的实例,但是没有调用start()方法;
  • 就绪状态:当调用线程的start()方法后,线程并不是马上进入运行状态的,还需要等待系统的调度;
  • 运行状态:线程中run()方法里代码运行时的状态;
  • 阻塞状态:多线程为了保证线程操作数据的安全性,使用synchronized关键字对代码块和方法进行修饰,这时候就会导致阻塞状态的产生;
  • 结束状态:线程run()方法中的代码执行完成后的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值