Java多线程入门

1.什么是并发?什么是并行?并发和并行有什么区别?

多个线程在同时运行(并行)或者交替运行(并发)。单核CPU:多个线程抢占这一个CPU资源,谁抢到谁运行,即交替运行(并发);多核CPU:例如n核CPU就能够有n个线程同时运行(并行),当有n+1个线程时,有一个核就存在并发。由此可知并行里面有并发。

2.同步和异步

同步和异步一般用来形容一次方法的调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为,期间等待的过程就是线程阻塞。异步方法调用更像一个消息传递,一旦开始,方法调用会当即返回,调用者能够后续操做,举个消息队列的例子。

关于异步目前比较经典以及经常使用的实现方式就是消息队列:在不使用消息队列服务器的时候,用户的请求数据直接写入数据库,在高并发的状况下数据库压力剧增,使得响应速度变慢。可是在使用消息队列以后,用户的请求数据发送给消息队列以后当即 返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。因为消息队列服务器处理速度快于数据库(消息队列也比数据库有更好的伸缩性),所以响应速度获得大幅改善!数据库

3.使用多线程常见的几种方式

前两种实际上不多用,通常都是使用线程池的方式比较多一点,这个很好想,不可能来一个请求就new一个线程,无端的资源开销。bash

3.1 继承Thread类

public class Test {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
        System.out.println("运行结束!");
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        System.out.println("Thread create by extends Thread!");
    }
}
复制代码

运行结果:

运行结束!服务器

Thread create by extends Thread!多线程

从上面结果能够看出:main方法是主线程,MyThread是新开辟的线程,是一个子任务,CPU以不肯定的方式,或者所是以随机的时间来调用线程中的run方法。并发

3.2 实现Runnable接口

相比于第一种方式,更推荐使用这种,由于Java是单继承可是能够多实现。异步

public class CreateThreadByImplements {
    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("运行结束!");
    }
}

class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("Thread create by implements Runnable!");
    }
}
复制代码

运行结果:

运行结束!ide

Thread create by implements Runnable!高并发

相关文章
相关标签/搜索