多线程对同一个对象操作
程序员文章站
2022-06-21 11:30:09
多线程实现的两种方式: 继承Thread类 实现Runnable接口 这两种方式都必须重写run()方法。 当多线程对同一个对象操作时,必须实现Runnable接口,而不能继承Thread类。因为继承Thread类实现多线程时,操作的是不同的对象。 1 Runnable r=new Runnable ......
多线程实现的两种方式:
继承Thread类
实现Runnable接口
这两种方式都必须重写run()方法。
当多线程对同一个对象操作时,必须实现Runnable接口,而不能继承Thread类。因为继承Thread类实现多线程时,操作的是不同的对象。
1 Runnable r=new RunnableImpl(); 2 Thread t1=new Thread(r); 3 Thread t2=new Thread(r); 4 t1.start(); 5 t2.start();
两个线程传同一个对象,相当于这两个线程对同一个对象进行操作。
注意:多线程对同一个对象操作的时候一定要加锁synchronized,同时传一个锁旗标。
加锁时,原则上要双重检查。
锁旗标对同一个对象有用,如果是两个对象,则这两个对象分别有自己的锁旗标,此时锁旗标就会失效。
synchronized不仅可以加在代码块上,还可以加在方法上。当加在方法上时,锁旗标是this,谁调用这个方法,this就是谁,只要是同一个对象就行·。
synchronized提高了安全性,降低了性能。
若有错误之处,欢迎指正。谢谢!
推荐阅读
-
JavaScript中对JSON对象的基本操作示例
-
python进阶之多线程对同一个全局变量的处理方法
-
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
-
HibernateTemplate对CLOB对象操作,No LobHandler found for configuration... springhibernateLobHandlerLocalSessionFactoryBean
-
如何将对数据库两个表的操作处于用一个事物下?同一个连接对象+事物拦截
-
多线程对同一个对象操作
-
【第七章】 对JDBC的支持 之 7.3 关系数据库操作对象化 ——跟我学spring3
-
【第七章】 对JDBC的支持 之 7.3 关系数据库操作对象化 ——跟我学spring3
-
python进阶之多线程对同一个全局变量的处理方法
-
MyBatis中对ListObject 对象List的批处理插入操作