java-多线程学习

  • 什么是进程?
    进程是程序在某个数据集上的执行,是一个动态的实体,它有自己的生命周期。进程反映了一个程序在一定的数据集上运行的全部动态过程。

  • 什么是线程?
    线程是进程内一个相对独立的、可调度的执行单元,又称为轻量级进程。线程与进程类似,也有运行、就绪、阻塞等状态。线程必须拥有父进程。系统没有为线程分配资源,它与进程中的其他线程共享该进程的共享资源。

    线程的生命状态图如下:
    在这里插入图片描述

多线程

多线程意味着一个程序的多个语句块同时进行,但不等于多次启动一个程序。

注意:一个程序至少有两个线程,一个为main线程,另一个为GC线程(垃圾回收线程)。

Java中实现多线程的方式有两种,第一种是生成Thread类的子类,并定义该子类自己的run方法,线程要完成的任务在其run方法中实现。 这种方法比较简单,但是如果定义的类已经是其他的子类,而Java不允许多重继承,我们可以采取第二种方法实现Runnable接口,通过实现Runnable接口中的run方法来实现线程的任务。

构建Thread子类对象

构建Thread子类对象的步骤:

  1. 构建Thread子类,重现其中的run方法
  2. 构建线程对象
  3. 线程对象调用start()方法启动该线程

下面以买票来进行模拟多线程实现:

 class MyThread extends Thread {
    @Override
    public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("李华卖出" + "------->" + i+"票");
            }
        }
    }
public class Test {
       public static void main(String[] args) {
             MyThread t =new MyThread();
             t.start();

             for(int i = 0;i < 5;i++) {
                 System.out.println("小红卖出------->" + i + "票");
             }

}
}

买票结果如下:
在这里插入图片描述

用实现Runnable接口对象构建Thread

 class MyThread implements Runnable{
    @Override
    public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("李华卖出" + "------->" + i+"票");
            }
        }
    }

public class Test {
       public static void main(String[] args) {
             Runnable r = new MyThread();
             Thread t = new Thread(r);
             t.start();

             for(int i = 0;i < 5;i++) {
                 System.out.println("小红卖出------->" + i + "票");
             }

}
}


用Runnable接口实现,整体结构大同小异,结果依旧能运行:
在这里插入图片描述
因为Runnable接口和Thread类之间没有继承关系,不能直接赋值,所以为开启多线程,需要Thread的实例对象对Runnable对象的包装。其中Thread提供线程支持;Runnable实现类提供线程执行体。

线程类Thread常用构造方法

构造方法备注
String getName()获取线程对象名字
void setName(String name)修改线程对象名字
static Thread currentThread()获取当前线程对象
static void sleep(long millis)让当前线程休眠millis毫秒,使当前线程进入休眠,即进入阻塞状态
void interrupt()终止线程的睡眠
int getPriority()获得线程优先级
void setPriority(int newPriority)设置线程优先级
最低优先级1,默认优先级是5,最高优先级10,但是优先级只是决定其概率,不存在必然事件
static void yield()让位方法,当前线程暂停,回到就绪状态,让给其它线程
void join()将一个线程合并到当前线程中,当前线程受阻塞,加入的线程执行直到结束

synchronized线程同步简述

使用方法:

  1. 同步代码块
synchronized(线程共享对象){
	同步代码块;
}

  1. 在实例方法上使用synchronized
    表示共享对象一定是 this 并且同步代码块是整个方法体。(一个线程访问了synchronized方法,其它线程不能同时访问这个synchronized方法)
  2. 在静态方法上使用synchronized,为类锁
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值