线程的基础知识

进程

需要通过系统分配,具有独立性和互斥性

线程

线程是组成进程的最小基本单位,每个进程至少得有一个线程

线程具有的特性

1.抢占式运行

CPU在执行的时候,是按照时间片执行的,单位时间片是相互抢占的

2.资源共享性

Java程序

一个java程序就是一个进程 Demo1main主函数 属一个应用程序

​         一个java应用程序至少有两个线程:

        ​ 1.main主函数线程

        ​ 2.jvm 垃圾回收线程

接下来是一个面试题

进程和线程的区别

进程是一个完整的程序

线程是进程里面的执行的一个功能。

一个应用程序是由多个线程组成的

进程申请是系统的资源

线程申请是进程的资源

多个线程在执行的时候,cpu会根据每个线程分配的时间片聊来随机抢占执行

每个线程最多占用的时间片大概是20ms,过了时间片,就切换到其他线程了

并发和并行

并发:同时发生,轮流交替执行

并行: 真正意义上的同时进行

创建线程的两种方式

第一种方式

Thread类:

        1.声明一个Thread子类,重写run方法

        2.调用start开启线程

class MyThread1 extends Thread {
    @Override
    public void run() {

        //for循环
        for (int i = 0; i < 100; i++) {
            System.out.println("我是Mythread1线程里面的代码");
        }
        
    }
}
class MyThread2 extends Thread {
    @Override
    public void run() {
        //for循环
        for (int i = 0; i < 100; i++) {
            System.out.println("我是Mythread2线程里面的代码");
        }
        
    }
}
public class Demo1 {
    public static void main(String[] args) {
        //main一个线程
        //实例化出来一个线程对象
        MyThread1 myThread1 = new MyThread1();
        //通过调用start方法开启线程一定是start方法
        myThread1.start();
        MyThread2 myThread2 = new MyThread2();
        myThread2.start();
     
   //4个线程    2个myThread   1main   1jvm 垃圾回收器
        for (int i = 0; i < 100; i++) {
            System.out.println("我是main主函数线程");
        }
        
    }

}
第二种方式(开发中会用)

1.写一个类去实现Runnable接口,实现run方法

2.实例化Thread类,然后构造器的参数是一个实现Runnable接口的对象

class MyThread4 implements Runnable {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 0; i < 100; i++) {
            System.out.println("MyThread" + i);
        }
    }
    
}
public class Demo2 {
    public static void main(String[] args) {
        //第二种写法
        Thread thread = new Thread(new MyThread4());
        thread.start();//开启线程
        for (int i = 0; i < 100; i++) {
            System.out.println("main:" + i);
        }
    }

}

6.线程下面的方法

构造方法:

    • Thread() 分配一个新的 Thread对象。
      Thread(Runnable target) 分配一个新的 Thread对象。
      Thread(Runnable target, String name) 分配一个新的 Thread对象。 并对当前线程起个名字哦

成员方法:

static Thread currentThread();获取当前线程对象

String getName();获取当前线程名字的

void setName(String name);设置当前线程的名字

void setPriority(int newPriority);设置当前线程的优先级。这个优先级只会增加线程执行的概率

但是真正的会不会优先不一定。int类型的参数,所有线程默认的优先级是5 传值 1-10 1的优先级是最低的,10优先级是最高的

int getPriority();获取当前线程优先级的

现在大家想一个问题,线程不可控,乱抢。怎么解决这样的问题呢?现在的解决方案让其睡会,就不抢占了

static void sleep();让线程休眠多少毫秒

可以让线程睡一会儿来控制线程的执行的先后顺序的

在run方法中调用Thread.sleep();只能try-catch不能抛

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值