day13-多线程

多线程

线程与进程的区别

进程:进程指的是内存中一个运行的应用,一个进程有多个或一个进程,通常是xxx.exe程序,进程与进程之间资源不共线

线程:一个进程包含一个或多个线程,表示线程之间可以同时进行,线程与线程之间资源可以共享

多线程的好处:多线程可以并发执行,如果没有多线程,只能一个运行结束之后再进行下一个任务,不符合生活实际要求

多线程的调度情况:cpu进行调用,cpu会给线程分配时间片(CPU给线程的运行时间,一般几毫秒到几时毫秒不等),之间是抢占式的,谁抢到时间片,谁执行

并发与并行

并发:某时间段内同时执行

并行:同一个时间同时执行

主线程main

一个简单的Java程序就已经拥有两个线程,一个是主线程(main),一个是堆的垃圾回收(gc)。

Thread实现线程创建与启动

public class Demo{
    public static void main(String args[]){
        new ThreadDemo().start();
        //java 1.8写法
        new Thread(()->{
            public void run(){
                //线程主体
            }
        }).start();
    }
}
class ThreadDemo extends Thread{
    public void run(){
        //...线程的主体
    }
}

Runnable实现线程的创建与启动

public class Demo{
    public static void main(String args[]){
        RunnableDemo rd = new RunnableDemo();
        new Thread(rd).start();
    }
}
class RunnableDemo implements Runnable{
    public void run(){
        //...线程的主体
    }
}

Thread与Runnable的区别

Thread是类而Runnable是接口,Thread实现了Runnable接口,如果实现了接口也要使用Thread进行启动

Runnable更容易实现资源贡献,能多个线程同时处理一个资源

对象实现了Thread后不能再次继承,使用了接口从设计上更加好

线程的启动

启动一个新的线程不能使用run()方法(run方法不能开辟线程),只能使用start方法

注:一个线程对象,start方法只能调用一次

join方法

当前线程停止让对应的线程优先执行

sleep方法

让线程阻塞

线程优先级

设置线程优先级:setPriority(int x)

获得线程优先级:getPriority

后台线程

setDaemon(true)设置为后台线程,前台线程都死亡后,后台线程自动死亡

必须在start()方法之前调用

获得线程的名字

在继承Thread类里使用this.getName()进行获取

在实现了Runnable接口里使用Thread.currentThread().getName()进行获取

同步代码块

synchronized(同步锁){
    
}

同步锁内容里写this表示当前对象只能有一份

同步方法

使用synchronized修饰的方法叫做同步方法

synchronized public void doWork(){
    
}

如果方法使用static修饰的话同步锁就是当前类对象,如果方法不是用static修饰同步锁就是this

synchronized的优略势

StringBuffer和StringBuilder的区别

ArrayList和Vector的区别

HashMap和HashTable的区别

前者都是使用synchronized修饰的所以比较安全,后者没有使用synchronized修饰所以不怎么安全

使用synchronized修饰性能比较低下、比较耗费资源,但是比较安全

什么时候线程不安全

多线程的时候

出现非原子性操作

共享同一个资源

如果解决线程不安全

同步代码块

同步方法

同步锁对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值