聊一下多线程基础详解编程语言

聊一下多线程基础详解编程语言

在操作系统中,同时有许多个进程在运行,他们依照优先级排列,依次占用资源来运行。一个进程由多个线程组成。

Java在运行的时启动JVM,每个JVM相当于是一个进程,而其中至少会有两个线程启动,分别是GC(垃圾回收机制),主线程(main)


一.多线程的两种实现方法


1.继承Thread类,重写run()方法,利用该类中的start()方法来启动线程

class MyThread extends Thread{   //本质上Thread类是Runnable的实现类  但是单继承扩展性不好

String name;

int tacket  = 5;

    public MyThread(String name) {

        this.name = name;

}

    public void run() {   //创建线程需要对run方法进行重写  

        while(tacket!=0){

            System.out.println(name+tacket–);

        }

    }

}

public class ThreadDemo {

    public static void main(String[] args) {

        MyThread mt = new MyThread(“线程A”);          //参数为线程名

        MyThread mt1 = new MyThread(“线程B”);

        mt.start();     //调用start方法自动调用run方法

        mt1.start();

    }

}


2.实现Runnable接口,必须重写run()方法,在利用Thread类的构造函数传入实现接口的引用,最后调用属于Thread类的start()方法启动

class Mythread1 implements Runnable{

        int tacket = 5;

        static String str =””;

    public void run() {

        // TODO Auto-generated method stub

        while(tacket!=0){

            str += Thread.currentThread().getName()+tacket–+”/n”;

        }

    }

}

public class RunnableDemo {

    public static void main(String[] args) {

        Mythread1 mt = new Mythread1();    

        Thread t = new Thread(mt,”线程A”);   

        Thread t1 = new Thread(mt,”线程B”);   

        Thread t3 = new Thread(mt);

        t.start();          //调用start方法 CPU对线程进行调度  然后执run方法运行

        t1.start();

    }

}


二.这两种种方法的比较

目前开发一般会使用第二种,也就是实现Runnable接口主要是有两个原因


1.继承Thread是单继承,而实现Runnable接口提高了程序的可扩展性
2.实现Runnable接口可以资源实现共享


线程的状态:创建,就绪,运行,阻塞,终止

介绍一些线程的常用操作

static Thread currentThread()返回对当前正在执行的线程对象的引用。

String getName() 返回该线程的名称。

int getPriority()

返回线程的优先级。

主线程的优先级为5,最高优先级为10,最低优先级为1。

boolean isAlive()

测试线程是否处于活动状态。

static void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

static void yield()

暂停当前正在执行的线程对象,并执行其他线程。

同步和死锁


 三.资源共享时候使用同步(Synchronization),有两种同步方法:


1.同步代码块
2.同步方法


同步代码块的效率要高于同步方法

同步方法直接在方法上加synchronized实现加锁,同步代码块则在方法内部加锁。

很明显,同步方法锁的范围比较大,而同步代码块范围要小点,一般同步的范围越大,性能就越差,一般需要加锁进行同步的时候,肯定是范围越小越好,这样性能更好。

在程序中过多的同步会发生死锁现象,及两个线程一直处于相互等待状态,如果没有外力干扰会一直等待下去

聊一下多线程基础详解编程语言

转载请注明来源网站:blog.ytso.com谢谢!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/14664.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论