Java基础--并发编程基础(1)

来源:互联网 发布:ios 可变字典添加数据 编辑:程序博客网 时间:2024/05/17 06:38

1.多任务处理

多任务处理分为两种不同的类型:基于进程的多任务处理和基于线程的多任务处理。
进程:进程是运行的程序,是操作系统进行调度和资源分配的基本单元。进程有独立的内存空间,进程间的通信和进程间的上下文切换的开销比较大。
线程:进程由线程组成,线程是比进程更小的单元,是CPU进行调度的基本单元。线程之间共享一个进程的内存空间,线程间通信和上下文切换的开销相对较小。
虽然Java程序使用基于多进程的多任务环境,但是基于多进程的多任务处理并不是由Java控制的。不过,基于多线程的多任务处理是由Java控制的。

2.线程的优先级

Java为每个线程都指定了优先级,线程的优先级用于在上下文切换中决定把CPU的执行权交给哪个线程。
理论上,优先级高的线程将拥有更多的执行时间,而同优先级的线程有相同的运行时间。
Java中线程的优先级可以通过Thread类的setPriority(int p)方法设定优先级,优先级的取值区间为[1,10],1最低,10最高,5为默认优先级

3.获取操作当前线程

Java中使用Thread类的currentThread()方法来获取当前线程,返回值是一个Thread对象。
获取操作当前线程的代码如下:
public class MainThread {/* * 所有的线程都是在主线程之上创建而来的 */public static void main(String[] args) {Thread t = Thread.currentThread();System.out.println(t);t.setName("My-mainThread");System.out.println(t);}/* * 输出结果: * Thread[main,5,main] * Thread[My-mainThread,5,main] * 中括号中依次是:[线程名称、线程优先级、线程所属线程组名称] * 线程优先级可以设置,优先级越大越好,范围是[1,10],默认优先级是5 */}

4.创建线程

创建线程有两种最基本方式(后续博文会探讨其他创建线程的实现):一种是扩展Thread类,然后重写run方法,然后创建该线程的对象,调用该对象的start方法即可使线程启动(start方法内部就是调用了run方法);一种是实现Runnable接口,然后实现run方法,然后创建线程类(把扩展了接口的类作为构造器参数传进去),然后调用该线程的start方法即可使线程启动,当然,在Java8之后,由于Runnable接口是一个函数式接口,可以使用lambda表达式更简单的使用第二种方式,本次还是使用旧式的,后续博文采用lambda表达式的形式。
实例代码如下:
public class CreateThreadsByTwoWays {public static void main(String[] args) {Thread t1 = new Thread(new T1());t1.start();Thread t2 = new T2();t2.start();for(int i = 0;i<6;i++){System.out.println("main Thrad... "+i);}}//运行结果//by implementing Runnable... 0//by extending Thread... 0//main Thrad... 0//by extending Thread... 1//by implementing Runnable... 1//by extending Thread... 2//main Thrad... 1//main Thrad... 2//by extending Thread... 3//by extending Thread... 4//by implementing Runnable... 2//by extending Thread... 5//main Thrad... 3//main Thrad... 4//main Thrad... 5//by implementing Runnable... 3//by implementing Runnable... 4//by implementing Runnable... 5}//实现Runnabl接口class T1 implements Runnable{//在Java8中这种使用Runnable的方式不多了,使用lambda表达式创建更方便@Overridepublic void run() {for(int i = 0;i<6;i++){System.out.println("by implementing Runnable... "+i);}}}//扩展Thread类class T2 extends Thread{@Overridepublic void run(){for(int i = 0;i<6;i++){System.out.println("by extending Thread... "+i);}}}


1 0
原创粉丝点击