栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java进程和线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java进程和线程

目录

进程

线程

实现多线程

设置和获取线程名称

线程调度

线程控制

同步代码块

同步方法

Lock锁


进程

       进程是正在运行的程序,是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源

线程

      线程:是进程中的单个顺序控制流,是一条执行路径

      单线程:一个程序如果只有一条执行路径,则称为单线程程序

      多线程:一个程序如果有多条执行路径,则称为多线程程序

实现多线程

方式一:继承Thread

       定义一个类MyThread继承Thread类

       在MyThread类中重写run()方法

       创建MyThread类的对象

       启动线程

方式二:实现Runnable接口

       定义一个类MyRunnable实现Runnable接口

       在MyRunnable类中重写run()方法

       创建MyRunnable类的对象

       创建Thread类的对象,把MyRunnable对象作为构造方法的参数

       启动线程

设置和获取线程名称

Thread类中设置和获取线程名称的方法

      void setName(String name):将此线程的名称更改为等于参数name

      String getName():返回此线程的名称

public class MyThreadDemo {
    public static void main(String[] args) {

        MyThread my1 = new MyThread("飞机");
        MyThread my2 = new MyThread("高铁");

        my1.start();
        my2.start();
    }
}
public class MyThread extends Thread{
    public MyThread(){}
    public MyThread(String name){
        super(name);
    }
    @Override
    public void run() {
        for(int i = 0;i<10;i++){
            System.out.println(getName()+":"+i);
        }
    }
}

线程调度

线程有两种调度模式

       分时调度模式:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU时间片

       抢占式调度模式:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一些

Thread类中设置和获取线程优先级的方法

public final int getPriority():返回此线程的优先级

public final void setPriority(int newPriority):更改此线程的优先级

线程默认优先级是5,线程优先级的范围是:1-10

线程优先级高仅仅表示线程获取的CPU时间片的几率高,但是要是在次数比较多,或者多次运行的时候才能看到你想要的效果

线程控制
方法名说明
static void sleep(long millis)使当前正在执行的线程停留(暂停执行)指定的毫秒数
void join()等待这个线程死亡
void setDaemon(boolean on)将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出

同步代码块

锁多条语句操作共享数据,可以使用同步代码块实现

格式:

 synchronized(任意对象){

     多条语句操作共享数据的代码

}

synchronized(任意对象):就相当于给代码加锁了,任意对象就可以看成一把锁

同步方法

就是把synchronized关键字加到方法上去

格式:修饰符 synchronized 返回值类型 方法名(方法参数){}

同步方法的锁对象是this

同步静态方法:就是把synchronized关键字加到静态方法上

格式:修饰符 static synchronized 返回值类型 方法名(方法参数){}

同步静态方法的锁对象是:类名.class

Lock锁

       虽然我们可以理解同步代码块和同步方法的锁问题,但是我们并没有直接看到在哪里加上了锁,哪里释放了锁,为了更清晰的表达如何加锁和释放锁,java提供了一个新的锁对象Lock

       Lock实现提供比使用synchronized方法和语句可以获得更广泛的锁定操作

       Lock中提供了获得和释放锁的方法

void lock():获得锁

void unlock():释放锁

       Lock是接口不能直接实例化,这里采用它的实现类ReentrantLock来实例化

       ReentrantLock的构造方法:ReentrantLock():创建一个ReentrantLock的实例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号