JAVA多线程

        一个进程可以含有多个线程,进程和进程资源不共享,线程和线程中堆内存,栈内存方法区资源独立,一个线程一个栈。多线程提高程序效率。MAIN方法结束不代表程序结束,一个MAIN方法结束只代表当前线程结束。

        多线程并发:线程线程之间互不影响,对于单核CPU通过加快处理速度从而达到“多线程并发”。

        实现线程的三种方式:1.编写一个类直接继承Thread并重写RUN方法。可以在MAIN方法中进行新建线程。Start()方法作用:启动一个分支线程,并在JVM中开辟一个栈空间,然后结束。启动成功的线程会自动调用RUN方法,并压栈到栈底部。方法体中是自上而下进行的。

2.采用接口(面向接口):写一个实现RUNNABLE接口类,然后实例化接口对象做为参数构造新线程,并且可以继承其他类,更灵活,如采用匿名内部类:创建对象时直接将RUNNABLE接口实现并作为参数构造新线程。

3.实现Callable接口:创建未来任务类对象(FutureTask)重写call方法(返回Object类)。可通过一个线程访问另一个线程的结果(调用get()方法)但调用线程阻塞。

        线程生命周期

        新建状态:NEW 出来的线程对象。

        就绪状态:线程进行抢夺CPU时间片。

        运行状态:run方法的执行,有可能线程占用的时间片用完之后会继续进入就绪状态,也可能进入阻塞状态。

        死亡状态:run方法运行结束之后,线程死亡。

        阻塞状态:当遇到键盘输入或者SLEEP方法(静态方法:不能通过对象进行调用,出现在哪个线程中,即线程进入休眠状态)时,线程会进行停止运行,放弃当前占有的CPU时间片。会继续进行抢夺CPU时间片,继续上次的·run方法继续执行。

        终止线程:贴个标签。

        线程安全

        线程同步机制:线程不能并发,效率低,但安全。

        异步机制:多线程并发,效率高,不安全。

        线程同步机制:锁机制,一个对象一把锁,synchronized(多线程共享的数据(对象))。

        变量:局部变量(在栈中)不共享,不存在线程安全问题,一个线程一个栈。

        实例变量(在堆中),静态变量(在方法区中),有且仅有一个,存在线程安全问题。

synchronized的3种写法:1.同步代码块

2.在实例方法上使用synchronized表示共享对象一定时this并且同步代码块是整个方法体。

3.在静态方法上,表示找类锁,类锁只有一把(模板只有一个),100个对象一把类锁。

解决线程安全问题:

1.局部变量代替静态或实例变量;

2.如必须是实例变量,则需创建多个对象;

3.最后不得不选择synchronized。

守护线程:所有用户线程结束,守护线程结束,main方法是一个用户线程,垃圾回收线程即是一个守护线程。作用:数据进行备份。用法:Thread.setDaemon(true)。

定时器:作用:每隔特定时间,执行特定程序。

1.使用Sleep方法睡眠。

2.使用JAVA类库Java.util.Timer

3.Spring提供的SpringTask框架

wait和notify方法(任何对象都可以调用):作用在当前对象上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值