关于线程的基本认知

1.线程有6种状态:新建,运行,等待,阻塞,计时等待,终止。

如何创建一个线程:

1.首先声明一个类继承Thread类,该子类还应覆盖run方法 比如:

class MyThread extends Thread{

public void run(){}

}

2.然后创建一个线程并开始运行

MyThread myThread = new MyThread();

myThread.start();

3.或者声明一个实现 Runnable接口的类, 该类然后实现 run 方法, 然后可以分配类的实例,在创建 Thread时作为参数传递,然后启动

class MyThread implements Runnable{

public void run(){}

}

4.然后创建一个线程并开始运行

MyThread myThread =new MyThread();

new Thread(myThread).start();

2.关于线程的生命周期

当你用new Thread()方法创建了一个线程,创建完成之后线程就进入就绪状态(Runnable),此时线程进入抢占CPU资源状态,当线程抢到CPU的执行权之后进入运行状态(Running),当线程完成后或者其他原因调用了stop()方法,线程就进入到死亡状态。还有几种情况下会造成线程阻塞,第一种是当线程主动调用sleep()方法时。还有当线程主动调用阻塞时的io方法。还有一种情况是线程在等待某个通知时会进入阻塞状态。

3.单线程和多线程

1.单线程顾名思义就是一条线程进行执行任务·

2.多线程就是多个线程同时执行任务,多线程具有并行性,更高的运行效率。

4.线程池

在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念。

线程池:Java中开辟出了一种管理线程的概念,这个概念叫做线程池,从概念以及应用场景中,我们可以看出,线程池的好处,就是可以方便的管理线程,也可以减少内存的消耗。
 

5.线程安全

1.临界资源问题:多个线程同时访问相同的资源并进行读写操作。

解决思路:避免竞态条件,多线程同步,必须获得每一个线程对象的锁(lock)。

2.死锁:死锁也是一种因为对资源争夺而出现的状态,是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们将一直互相等待而无法推进下去。因此要解决死锁,尽量避免对同一资源的剥夺,请求和保持,避免循环等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值