Java基础之线程

进程与线程

  • 进程:进程是指内存中运行得一个程序,每一个进程都有一个独立的内存空间,一个应用程序能够同时运行多个进程;进程是程序运行的一次过程,是系统运行程序的基本单位。java

  • 线程:进程内部以个单独的独立执行单元,一个进程能够包含多个线程。多线程

  • 进程与线程的区别:并发

    • 进程:有独立的存储空间,进程中的数据存放空间(栈空间和堆空间)是独立的,至少有一个线程ide

    • 线程:堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小得多测试

  • 线程掉度spa

    • 计算机CPU在任意时刻只能执行一条指令,每个进程只有得到CPU的使用权才能去执行指令。多进程并发执行,就是各个进程轮流抢夺CPU的使用权来完成指令。在可运行池中,会有多个线程处于就绪状态来等待抢夺CPU的使用权,JVM就负责了线程的调度。线程

    • JVM采用的是抢占式调度,没有使用分时调度,由于可能会形成多线程执行结果的随机性。code

Java建立线程方法----继承Thread类

  • java中建立线程类使用的java.lang.Thread来建立线程,全部的线程都是Thread类或者其子类。对象

  • 经过继承Thread类来建立并启动线程的步骤以下:blog

    • 1.定义Thread类的子类,并重写run()方法,在run()中写好要执行的程序。

    • 2.建立Thread子类的实例对象,也便是建立了线程对象

    • 调用start()方法开启线程

    代码演示:

 1 //测试类
 2 public class Test1 {
 3     public static void main(String[] args) {
 4         MyThread001 thread001 = new MyThread001("个人线程");
 5         thread001.start();
 6         //主方法中循环执行打印语句
 7         for (int i = 1; i <=10 ; i++) {
 8             System.out.println("main线程第"+i+"次执行");
 9         }
10     }
11 }

 

 1 //实现类
 2 public class MyThread001 extends Thread{
 3     public MyThread001(String name) {
 4         super(name);
 5     }
 6  7     @Override
 8     public void run() {
 9         for (int i = 1; i <=5 ; i++) {
10             System.out.println(getName()+i+"正在执行");
11         }
12     }
13 }
14

Thread类

  • Thread类经常使用构造方法

    • public Thread():分配一个新的线程对象。

    • public Thread(String name) :分配一个指定名字的新的线程对象。

    • public Thread(Runnable target) :分配一个带有指定目标新的线程对象

    • public Thread(Runnable target,String name) :分配一个带有指定目标新的线程对象并指定名字

  • Thread类经常使用方法

    • public String getName() :获取当前线程名称。

    • public void start() :致使此线程开始执行; Java虚拟机调用此线程的run方法。

    • public void run() :此线程要执行的任务在此处定义代码。

    • public static void sleep(long millis) :使当前正在执行的线程以指定的毫秒数暂停(暂时中止执行)。

    • public static Thread currentThread() :返回对当前正在执行的线程对象的引用

Java建立线程方法-----实现Runnable接口

  • 经过实现Runnable接口来建立线程

    • 1.定义Runnable接口实现类,重写run()方法。

    • 2.建立实现类的示例,并将这个实例对象传给Thread。

    • 3.调用Start()方法,开启线程

1 //runnable子类
2 public class MyRunnable implements Runnable{
3     @Override
4     public void run() {
5         for (int i = 1; i <10 ; i++) {
6             System.out.println("第"+i+"遍执行Runnable接口的实例对象打印");
7         }
8     }
9 }
 1 //测试类
 2 public class Test2 {
 3     public static void main(String[] args) {
 4         //实例化runnable接口对象
 5         MyRunnable mr = new MyRunnable();
 6         //将runnable接口实例对象做为目标传入Thread中
 7         Thread thread = new Thread(mr,"runnable实例");
 8         //启动线程
 9         thread.start();
10         for (int i = 1; i <=5 ; i++) {
11             System.out.println("main线程第"+i+"次打印"+thread.getName());
12         }
13     }
14 }

 

除了这两种方式去建立一个线程,我i们也能够经过线程池来建立使用线程,这个之后再说

Thread和Runnable的区别

  • 若是一个类继承了Thread类,那么不适合作资源共享;若是实现了Runnable接口,则很容易实现资源共分享

  • Runnable和Thread均可以让多个相同程序代码去共享同一个资源

  • 增长程序的健壮性,实现解耦操做,代码能够被多个线程共享,代码与线程独立

相关文章
相关标签/搜索