进程和线程

进程 Process
进程就是操作系统中执行的程序。一个程序就是一个执行的进程实体。
每个运行中的进程,都有属于它独立的内存空间,各个进程互不影响。
线程 Thread
线程是一个进程中的执行单元,一个进程中可以有多个线程。
多个线程,可以访问同一个进程中的资源。
每个线程都有一个独立的栈空间,这些线程所在的栈空间位于同一个进程空间中。
多线程
如果一个进程中,同时在执行着多个线程,就称为多线程。
多线程可以提高程序执行效率。如多个窗口卖票,可以加快卖票的效率。
其实每个执行的 Java 程序,都是多线程执行, main 方法称为主线程,还有 gc 线程 ( 守护线程 ) 在同时运行。

并行和并发

并行
各个进程同时执行,称为并行。
并发
多个线程同时执行,称为并发。

同步和异步

同步
所有的任务排队执行,称为同步执行。
异步
在执行任务 A 的同时,执行任务 B ,称为异步执行。

Java中的线程Thread

实现多线程的方法

方式一:继承Thread

1. 创建一个类,继承 Thread
2. 重写 Thread 类中的 run() 方法
3. 创建自定义的线程子类对象后,调用 start() 方法
自定义 Thread 线程的子类
package com.hqyj.ThreadTest;
/*
* 实现多线程步骤
* 1.成为Thread的子类
* 2.重写run()方法
* 3.创建当前类对象后,调用start()方法
* */
public class MyThread extends Thread {
@Override
    public void run() {
        for (int i = 0; i < 100; i++) {
        //让该线程输出0-99
        System.out.println(getName() + ":" + i);
    }
}

public MyThread(String name) {
    super(name);
}
public MyThread() {
}
}

main类

package com.hqyj.ThreadTest;
public class Test2 {
public static void main(String[] args) {
//创建无参数的自定义线程对象
MyThread t1 = new MyThread();
t1.setName("线程A");
//创建自定义线程对象,参数为线程名
MyThread t2 = new MyThread("线程B");
//让两个线程自动执行,必须调用start()
t1.start();
t2.start();
}
}

方式二:实现Runnable接口

由于Java中是单继承,如果某个类已经使用了extends关键字去继承了另一个类,这时就不能再通过

extends 继承 Thread 实现多线程。
就需要实现 Runnable 接口的方式实现多线程。
1. 自定义一个类,实现 Runnable 接口
2. 重写 run() 方法,将多线程要执行的内容写在该方法中
3. 创建 Runnable 接口的实现类对象
4. 使用构造方法 Thread(Runnable target) Thread(Runnable target String name) 将上一步创建
Runnable 实现类对象包装为 Thread 对象
自定义 Runnable 接口的实现类
package com.hqyj.ThreadTest;
/*
* 实现多线程步骤
* 1.成为Runnable的实现类
* 2.重写run()方法
* 3.创建该类对象
* 4.将其包装为Thread对象
* */
public class MyThread2 implements Runnable {
@Override

public void run() {
for (int i = 0; i < 100; i++) {
//让该线程输出0-99
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}

main类

package com.hqyj.ThreadTest;
public class Test2 {
public static void main(String[] args) {
//创建Runnable接口的实现类
Runnable target = new MyThread2();
//由于启动多线程必须要通过Thread的start()方法,所以一定要创建Thread对象
Thread mt = new Thread(target,"线程A");//这里使用Thread(Runnable target)构
造方法创建Thread对象
//让线程就绪
mt.start();
//创建另一个线程对象,让线程就绪
new Thread(new MyThread2(),"线程B").start();
}
}
死锁的解决方式
方式一
让两个线程获取资源的顺序保持一致。
方式二
让两个线程在获取资源 A B 之前,再获取第三个资源,对第三个资源使用 synchronized 进行同步,这样某个线程在获取第三个资源后,将后续内容执行完毕,其他线程才能开始执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值