java 线程 创建线程_java多线程学习(一)之创建线程的两种方式

1、首先来了解一下线程和进程的概念

进程的概念:

进程是操作系统资源管理的最小单位,进程是一个动态的实体,他是程序的一次执行过程。也叫作一个控制单元

线程的概念:

线程是进程中独立的控制单元,线程控制着进程的执行。一个进程中至少有一个线程。

java VM(java虚拟机)在运行时启动了一个进程---java.exe

该进程在执行时,至少有一个线程在控制着java程序的运行,并且这个线程存在于java的main函数中,

该线程称之为java的主线程。

扩展:在JVM运行时,除了main函数中的线程在运行外,还有JVM中负责java垃圾回收的线程在运行。因此,java不是单线程运行程序。

0818b9ca8b590ca3270a3433284dd417.png

实现多线程的第一种方式(单继承方式):

1.继承自Thread类实现多线程

步骤:1)创建一个类继承Thread

2)覆写run方法

目的是存放多线程要执行的自定义代码。

3)在main函数中创建该类

4)使用start()方法调用该线程(start方法有两种含义:1,启动多线程。2,调用线程中的run方法)

public class Day1{

public static void main(String args[]){

DemoThread dt = new DemoThread();

dt.start(); //用于启动线程,并自动执行run方法。

dt.run(); //只是单纯的对象调用,在主线程中执行,并不开启子线程。

for(int i=0;i<50;i++){

System.out.println("main run-----"+i);

}

}

}

class DemoThread extends Thread{

public void run(){

for(int i=0;i<50;i++)

System.out.println("demo run-----"+i);

}

}

我们发现运行同一个程序,他们的运行结果却不太相同,

这是多个线程都获取系统的CPU资源,CPU执行到谁,谁就运行。

CPU在某一时刻只能执行一个程序(多核除外),CPU在做着快速的切换,以达到看上去是在同时执行的效果。

我们通过打印输出,来判断到底是哪一个线程抢占到了CPU的资源。

Thread类的意义-----用于描述线程。

该类定义了一个功能,用于存储线程要运行的代码,而这个存储功能就是run方法。

run方法中存储线程要执行的 自定义代码块。

而start方法用于启动线程,并自动执行run方法。

Thread类中提供的常用的方法:

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

String getName();返回当前线程的名称。

当使用Thread的无参构造创建线程实例时,java虚拟机会自动为线程创建一个名字。(以Thread-编号的格式)

static void sleep(long time)  使线程休眠time时间。

创建线程的第二种方式(实现Runnable接口):

实现Runnable 接口来实现多线程:

步骤:

1)创建类实现Runnable接口

2)实现Runnable接口中的run方法

3)创建Thread对象

4)将Runnable对象作为实际参数传递给Thread的构造方法

5)调用Thread类的start方法,自动执行Runnable对象中的run方法

public class Day1Runable{

public static void main(String args[]){

DemoRunnable dr = new DemoRunnable();

Thread t1 = new Thread(dr);

Thread t2 = new Thread(dr);

Thread t3 = new Thread(dr);

Thread t4 = new Thread(dr);

t1.start();

t2.start();

t3.start();

t4.start();

}

}

class DemoRunnable implements Runnable{

private int ticket=100;

public void run(){

while(true){

if(ticket>0)

System.out.println(Thread.currentThread().getName()+"--售票:"+ticket--);

}

}

}

问题:继承方式与实现方式有什么区别   1、避免了单继承的局限性   2、多线程执行代码位置不同:     继承Thread类:代码存放在Thread类的run方法中     实现Runnable类:代码存放在Runnable接口的run方法中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值