关于多线程基础的一些总结

进程是什么?
我们平时所运行的程序都是进程,比如qq,微信这些

线程是什么?
进程中执行任务的一个分支,比如qq这个软件,需要执行发消息,收消息,联系人查询等这些任务都可以算是一个线程,执行的任务量小,可以看作是轻量级进程

线程的创建:(两种方式)
1.继承Thread类

public class TestThread extends Thread {

}

2.实现Runnable接口

public class TestThread implements Runnable {

    @Override
    public void run() {
        // 自定义具体实现接口中的方法

    }

}

线程的生命周期:
New:新建线程

    TestThread thread = new TestThread();//实现runnable接口
    Thread thread2 = new AnotherTestThread();//继承thread类

Runnable:当调用线程的start()方法时,该线程置为Runnable状态

Thread thread3 = new Thread(thread);//实现runnable接口的类需要转化为线程类对象
        thread3.start();
        thread2.start();

Running:Runnable状态的线程得到执行资源(CPU时间片)开始执行,置为Running状态

Blocked:线程因为某种原因停止运行,放弃了CPU资源

Waiting:等待状态
比较常见的原因:
1.Object的wait()方法(可有时间参数)
2.Thread.sleep方法(有时间参数)
3.Thread.join()方法(可有时间参数)

Dead:run(),main()方法执行结束

线程的分类:
用户线程和守护线程:
用户线程就是创建出来的线程,通过setDaemon(true)方法可以将其设置为守护线程
守护线程:也叫后台线程,不会阻断JVM的关闭,当JVM中没有用户线程时,守护线程也会自动退出,守护线程的子线程也是守护线程

什么是多线程?
从字面意思来解读,也就是多个线程。

多线程编程的特点:(类比团队)
1.多线程可以并发运行,执行效率高(团队成员一起执行任务)
2.可以不让CPU因为等待而空闲,充分利用CPU的所有资源(充分利用公司资源)
3.多线程会产生线程安全问题(团队成员之间的工作可能会有冲突)

锁的概念:
每个对象都有一把锁,只有持有这个对象的锁,才能对于它进行操作
wait方法必须和notify()/notifyAll必须成对出现,必须放在synchronized(同步)里,调用wait()方法,会释放对象锁
sleep方法不会释放锁,即其他线程依然无法对于这个对象进行操作
yield方法不会释放锁,是当前线程让出CPU占有权

同步:(synchronized)
同步方法:
synchronized关键字修饰的方法,如:

public synchronized void test() {

    }

修饰此方法会保护整个方法,即持有锁的线程执行该方法时,其他的线程无法执行
同步块:

synchronized(obj) {

        }

得到obj对象的锁的线程才能执行同步块中的代码
volatile关键字修饰变量:

private volatile int i;

代表此变量受保护,算是一种轻量级的同步

如何避免线程安全问题呢?
1.同步
2.使用原子类java.util.concurrent.atomic原子类
AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference
AtomicIntegerArray,AtomicLongArray
AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,AtomicReferenceFieldUpdater
AtomicMarkableReference,AtomicStampedReference,AtomicReferenceArray
3.线程安全类,比如StringBuffer类,该类中的方法都实现了同步功能

线程的调度:
线程的调度是受线程调度器控制的,它是操作系统服务,并不受JVM控制,它会根据线程的优先级,等待时间的长短,给线程分配CPU资源和时间(时间片)

死锁的概念:
正在执行的线程都在等待着别的线程释放资源
举个例子:
面试官:只要你告诉我什么叫做死锁我就录用你
面试者:只要你录用我我就告诉你什么叫做死锁

java.util.Timer类
可以让某线程在指定时间运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值