Java基础之线程
Posted maybecoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础之线程相关的知识,希望对你有一定的参考价值。
进程与线程
-
进程:进程是指内存中运行得一个程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程是程序运行的一次过程,是系统运行程序的基本单位。
-
线程:进程内部以个单独的独立执行单元,一个进程可以包含多个线程。
-
进程与线程的区别:
-
进程:有独立的存储空间,进程中的数据存放空间(栈空间和堆空间)是独立的,至少有一个线程
-
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小得多
-
-
线程掉度
-
计算机CPU在任意时刻只能执行一条指令,每一个进程只有获得CPU的使用权才能去执行指令。多进程并发执行,就是各个进程轮流抢夺CPU的使用权来完成指令。在可运行池中,会有多个线程处于就绪状态来等待抢夺CPU的使用权,JVM就负责了线程的调度。
-
JVM采用的是抢占式调度,没有使用分时调度,因为可能会造成多线程执行结果的随机性。
-
Java创建线程方法----继承Thread类
-
java中创建线程类使用的
java.lang.Thread
来创建线程,所有的线程都是Thread类或者其子类。 -
通过继承Thread类来创建并启动线程的步骤如下:
-
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都可以让多个相同程序代码去共享同一个资源
-
增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码与线程独立
以上是关于Java基础之线程的主要内容,如果未能解决你的问题,请参考以下文章