java多线程

java多线程,第1张

为什么要实现多线程:①可以提高资源利用率,如一个程序需要跑一段很长的时间,要是单线程只能等这个跑完。但多线程可以并发(单个Cpu)、并列(多个CPU)去执行其他的一些程序。

②让程序中的某个功能可以一个线程去做一件具体事情。(高效)

二、实现多线程有三种方法

①继承Thread类的方式。 ②实现Runnable接口的方式。③使用线程池的方式。

①继承Thread(线程)类说明

自定义的类中用extends关键字继承。之后得重写Run()方法。在方法里面写上自己要实现的内容。最后通过调用start()方法,启动线程

注:这里的所有方法都是继承自父类(Thread)的,要写上继承才能使用这些方法。

②Runnable(接口)的使用说明

在类中用implements关键字书写接口,加上Runnable并重写run()方法,Runnable只有一个方法就是run()方法,修改完后,在测试类中调用并创建对象作为任务,将创建对象的变量名填写在Thread的构造方法中。调用Thread的start()方法启动线程。

对比这两种各有优缺点:

第一种:中直接继承的第一个缺点就是将继承机会使用了,父类只能是Thread,但有点就是编写简单,并且继承后可以直接使用父类的各种方法。

第二种:中是通过接口方式去使用,因为接口可以有多个,因此扩展性强。但编写较为复杂,并且不能直接使用Thread的方法。只能间接去使用。

Thread的常用方法

 注意:并不是说设置了优先级就优先执行这个线程,只能说CPU会优先执行但这也不是绝对的,因为线程执行还是有随机性,只是概率上来说优先级越高的线程越有机会先执行。

线程安全问题

说明:为什么会有线程安全问题,是因为当多个线程访问共享数据,且多个线程对共享数据有更新 *** 作时,就容易出现线程安全问题。

java提供了三种解决出现问题的办法

1.同步代码块

格式:        synchronized(同步锁) {           有线程安全问题的代码        }

实例方法(无static修饰):同步锁对象就是this。(当前方法调用者对象)

静态方法(static修饰):同步锁对象为当前类的Class对象。 (类名.class 或者 对象名.getClass() 可以获取类的字节码对象 )

注:同步锁可以使用使用任意对象,Java中处处皆对象。但推荐使用官方推荐的方式来(即上面两种)

2.同步方法

格式:           修饰符  synchronized  返回值类型  方法名(参数列表) {                    方法体;           }

3.Lock锁机制

 try{            lock.lock();   //加锁                    需要同步处理的代码;       }finally{            lock.unlock();   //在finally块中,保证锁一定会被释放。       }

(具体看我上传的三种处理方式)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/905422.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-15
下一篇2022-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存