Java多线程学习笔记

Java多线程(Thread类)

A、创建线程方式一:继承Thread类

步骤:1、定义一个类,继承Thread类。

2、覆盖Thread类中的run()方法。

3、直接创建Thread类的子类对象。

4、调用start()方法即开启线程和调用run()方法。

创建线程的目的就是为了开启一条执行路径,来运行指定的代码和其他的代码实现同时运行。

 

而运行的指定代码就是这个执行路径的任务。

JVM创建的主线程的任务都定义在了主函数中 。

而自定义的线程他的任务在哪?

Thread类用于描述线程,线程是需要任务的,所以Thread类也是对任务的描述。

这个任务就是通过Thread类中的run方法来实现

run方法中定义就是线程要运行的任务代码

开启线程是为了运行指定代码,所以只有继承Thread类并复写run方法,将运行的代码定义在run方法中即可。

其中getName()方法用来获得对象线程的名字,Thread.currentThread().getName()来获得当前线程名字。

线程运行方式:

首先主线程开启,当新开启一个线程时,则会建立一条新的执行路径,并且一条路径上出现异常时,不会影响其他路径上任务的执行,且在栈空间里每个线程是独立的,主线程和其他线程的结束没有先后顺序可言。但是线程开启较多时,会使CPU切换速度减慢,占用资源较多,会执行影响效率。

B、创建线程方式二:实现Runnable接口来建立给Thread运行的任务

步骤:1、建立Runnable对象(线程的任务)

2、建立Thread的对象(执行工人)并赋值Runnable(任务)

3、启动 Thread

代码表示:

1、Runnable threadJob = new MyRunnable();

2、Thread myThread = new Thread(threadJob);

3、myThread.start();

在这里首先编写一个实现Runnable接口的类:

public class MyRunnable implements Runnable{

//将新的线程要运行的东西放在run方法里;

public void run(){

action();

}

public void action(){

System.out.println("hahahahaha!!!")

}

}

通常情况下,我们会选择方法二来创建新的线程,这里涉及到设计模式。总的来说,方式二更加符合面向对象的观点。

C、线程的休眠

想要确保其他的线程有机会被执行的话,就必须把当前线程放进休眠状态。,这样当线程恢复的时候,该线程会进入到可执行状态等待被调度器挑出来执行。

该方法可能会抛出异常,所以我们通常这么来调用它:

try{

Thread.sleep(1000);

}catch(InterruptedException e){

e.printStackTrace():

}

但凡事都有两面性,多线程可能会产生并发行的问题,,从而引起竞争状态,而竞争状态可能会引发数据损毁等问题。

参考书目:《Head Frist Java》

你可能感兴趣的:(Java)