多线程原理 java_【java】–多线程原理

  • Post author:
  • Post category:java


自考在《操作系统中》学到了关于进程和线程的概念,结合Demo更好的理解了多线程原理,

这篇博客主要讲一下多线程的创建和我对这个创建过程的理解。

首先展现一张思维导图:

0818b9ca8b590ca3270a3433284dd417.png

进程:是一个正在执行中的程序。

每一个进程执行都是一个执行顺序,该顺序是一个执行路径,或者叫控制单元。

线程:就是一个进程中的一个独立的控制单元。

线程在控制着进程的执行。

五种状态:

0818b9ca8b590ca3270a3433284dd417.png

创建线程

方法一:(继承Thread类)

创建步骤:1.定义类继承Threard.

2.复写Thread类中的run方法,

3.调用线程的start方法,

该方法有两个作用:启动线程,调用run方法。

/*

这是一个车站买票小例子。

假设100张票,四个窗口(4个线程)

*/

class Ticket extends Thread{ //继承java中的Thread类,此类就是对线程这类事物的描述。

private static int ticket=100;

public void run(){ //实现run方法

while(true)

{

if (ticket>0)

{

System.out.println(Thread.currentThread().getName() +”….sale”+ticket–);

}

}

}

}

class TicketDemo {

public static void main(String[] args){

//建立四个线程

Ticket t1=new Ticket();

Ticket t2=new Ticket();

Ticket t3=new Ticket();

Ticket t4=new Ticket();

//通过start方法启动线程。

t1.start();

t2.start();

t3.start();

t4.start();

}

}运行结果:(看着应该是没有问题的…)

0818b9ca8b590ca3270a3433284dd417.png

方法二:(实现Runnable接口)

创建步骤:

1.定义类实现Runnable接口

2.覆盖Runnable接口中的run方法

3.通过Thread类建立线程对象

4.将Runnable接口的子类对象作为实现参数传递给Thread类的构造函数。

5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

/*

这是一个车站买票小例子。

假设100张票,四个窗口(4个线程)

*/

class Ticket implements Runnable{

private int tick=100;

public void run(){

while(true)

{

if(tick>0)

{

System.out.println(Thread.currentThread().getName()+”…sall….”+tick–);

}

}

}

}

class TicketDemo2{

public static void main(String [] args){

//下面的代码,你看懂了吗?这是我要讲的了。。。。

Ticket t=new Ticket();

Thread t1=new Thread(t);

Thread t2=new Thread(t);

Thread t3=new Thread(t);

Thread t4=new Thread(t);

t1.start();

t2.start();

t3.start();

t4.start();

}

}运行结果假设和上面相同,省略..

解释上面代码:

通过对api的查找,java以提供了Thread类专门来描述线程。

这个类有几个值得注意的地方:

1.构造函数

0818b9ca8b590ca3270a3433284dd417.png

2方法

0818b9ca8b590ca3270a3433284dd417.png

总结:

就是说:先要创建线程—>调用start方法来开始线程–>java虚拟机调用run方法

而run方法中就是线程要执行的程序。

由于,在java中单继承的局限性,java设计师就设计了一个Runnable接口,而且里面只有一个方法名,

就是来实现run方法,创建进程。从而有了方法二。

我的理解,可以自己写一个Demo来模仿这样的过程。

/*

我们将方法一,和方法二结合起来,做一下实验

*/

class Thread{

private interface t;

public Thread( Runnable t)

{

this.t=t;

}

public void run()

{

t.run();

}

public void start() //*必须通过start方法才能创建线程。

{

this.run();

}

}

interface Runnable

{

public void run();

}

/*方法一

继承Thread类

复写run方法

创建线程类(创建Thread的子类对象),并调用start方法开启线程。

*/

/*方法二

实现Runnable中的run方法

创建线程类(创建Thread的对象),同时将线程中的运行代码加入到Thread构造方法中

调用start方法开启线程。

*/

通过对api的



版权声明:本文为weixin_32722049原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。