线程进程的区别以及使用

线程,进程和锁的使用

1.1 什么是进程
一个独立的程序,向系统申请资源
1. CPU 使用率
2. 内存 占用率

特征:
1. 互斥性
2. 独立性
3. 并发性
1.2 什么是线程
线程就是当前程序内的一个功能模块,很多软件(进程)可以同时处理多个事情。这种形式就是线程的理念
线程使用的资源是【进程】提供的
抢占式运行!!!
进程内的不同线程,是抢占CPU和内存资源,同时在抢占CPU的执行时间片!!!

特征:
1. 资源共享
2. 资源抢占
3. 并发性
1.3 进程和线程的区别
进程的资源分配是由系统控制的
线程的资源分配是由进程控制的

1.4 线程的优缺点
优点:
1. 可以同时处理多个业务,提高用户体验
2. 可以更好的利用CPU和内存资源

缺点:
1. 处理业务过多的情况下,会导致用户体验不好,卡
2. 提高CPU和内存的压力,占用过多的系统资源
3. 存在【共享资源问题】
1.5 线程的创建方式
a. 自定义线程类,继承Thread类型,重写run方法,在run方法中完成线程代码。

b. 自定义线程类,遵从Runnable接口,实现run方法,在run方法中完成线程代码

【墙裂推荐】
使用遵从Runnable接口的方式来完成自定义线程类的定义,因为Java中的所有的类都是单继承模式,如果一个类继承Thread类,就无法继承其他类,会影响代码中的逻辑。但是遵从接口,只是拓展了当前类的一个功能,不会影响原本的代码逻辑。

  /**
 * 继承Thread类实现自定义线程类
 */
class MyThread1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("继承Thread类完成的自定义线程");
        }
    }
}/**
 * 遵从Runnable接口实现自定义线程类
 */
class MyThread2 implements Runnable {@Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("遵从Runnable接口完成的自定义线程");
        }
    }
}
​
​
public class Demo1 {
    public static void main(String[] args) {
        // 1. 创建自定义线程类对象
        MyThread1 myThread1 = new MyThread1();/*
         2. 启动线程不能直接调用run方法,需要使用Thread类内的start方法
        */
        myThread1.start();// 把遵从Runnable接口的自定义线程类对象作为Thread类构造方法的参数
        Thread thread = new Thread(new MyThread2());
​
        thread.start();for (int i = 0; i < 100; i++) {
            System.out.println("main线程!!!");
        }
    }
} 

1.6 线程操作中的常用方法

构造方法 Constructor
Thread();
创建一个线程类对象,并且线程对应的名字是系统提供的默认名字
Thread(Runnable target);
创建一个线程类对象,使用Runnable接口的实现类对象,作为线程执行的核心代码
Thread(Runnable target, String name);
创建一个线程类对象,使用Runnable接口的实现类对象,作为线程执行的核心代码,并且名字按照提
供的name来赋值操作

成员方法 Method
void setName(String name);
设置线程的名字
String getName();
获取当前线程的名字
void setPriority(int priority);
设置线程的优先级,优先级范围 1 ~ 10 1 最低, 10 最高,5 默认。优先级决定当前线程的执行概
率,不能确定一定执行
int getPriority();
获取当前线程的优先级

static Thread currentThread();
    当前方法在哪一个线程中执行,就获取对应的线程对象
static void sleep(int ms);
    让当前程序休眠指定的毫秒数 1000 ==> 1 sec 

类方法能不能使用类内的成员变量
可以使用类内的静态成员变量,但是不能直接使用类内的非静态成员变量!!!

打印展示Thread类对象,展示内容:
Thread[Thread-0,5,main]
ThreadName, ThreadPriority, ThreadGroup

1.7 同步代码块【重点】
在线程操作中,存在大量的线程抢占共享资源问题,需要通过同步代码块来完成对于共享资源的操作限制。

synchronized (锁对象) {

}
锁对象:
1. 首先是一个类对象,不能是基本数据类型!!!
2. 锁对象有唯一性,同一个线程类对象的不同线程,操作同一个代码块时,锁对象必须一致
3. 同步代码块越短越好,需要提高执行的效率
4. 同步代码块中有且只允许一个线程在代码块中运行
5. 线程调用sleep方法不会开启锁对象!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值