java之synchronized
来源:互联网 发布:未备案域名 如何跳转 编辑:程序博客网 时间:2024/06/08 02:45
1 java中有一个会控制线程的功能,就是synchronized。通过synchronized可以控制多个线程,保证每时每刻只有一个线程得到资源。
如:synchronized(this.getClass().getName()){
for(int i=0;i<10;i++){
num=num+1;
Date date=new Date();
for(int j=0;j<1000000000;j++){
}
System.out.println("name:"+name+",num:"+num+",time:"+date.getTime());
}
}
2 两个以及两个以上的线程,想通过访问一个资源。通过synchronized(当前类的全路径)方法块,通过当前类的全路径,就会始终保证是每时每刻只有一个线程得到资源。所以必须保证是当前类的全路径。通过this.getClass().getName()就可以得到当前类的全路径。
如:synchronized(this.getClass().getName()){
。。。。。。。。
}
3 所以以后想要控制每时每刻只有一个线程得到资源,而不会出现混乱。则通过synchronized即可。参数为当前类的全路径。
完整的例子:
线程1:
public class Thread_test1 extends Thread{
public void run() {
String name=Thread.currentThread().getName();
CommonService commonService=new CommonService();
commonService.test(name);
}
}
线程2:
public class Thread_test2 extends Thread{
public void run() {
String name=Thread.currentThread().getName();
CommonService commonService=new CommonService();
commonService.test(name);
}
}
资源:
public class CommonService {
private static int num=0;
public void test(String name) {
synchronized(this.getClass().getName()){
String name_=this.getClass().getName();
Class class_=com.test_thread.service.CommonService.class;
String class_name=class_.getName();
System.out.println(name_+"-"+class_name);
for(int i=0;i<10;i++){
num=num+1;
Date date=new Date();
for(int j=0;j<1000000000;j++){
}
System.out.println("name:"+name+",num:"+num+",time:"+date.getTime());
}
}
}
}
测试类:
public class TestMain {
public static void main(String[] args) {
Thread_test1 test1=new Thread_test1();
Thread_test2 test2=new Thread_test2();
test1.start();
test2.start();
}
}
如:synchronized(this.getClass().getName()){
for(int i=0;i<10;i++){
num=num+1;
Date date=new Date();
for(int j=0;j<1000000000;j++){
}
System.out.println("name:"+name+",num:"+num+",time:"+date.getTime());
}
}
2 两个以及两个以上的线程,想通过访问一个资源。通过synchronized(当前类的全路径)方法块,通过当前类的全路径,就会始终保证是每时每刻只有一个线程得到资源。所以必须保证是当前类的全路径。通过this.getClass().getName()就可以得到当前类的全路径。
如:synchronized(this.getClass().getName()){
。。。。。。。。
}
3 所以以后想要控制每时每刻只有一个线程得到资源,而不会出现混乱。则通过synchronized即可。参数为当前类的全路径。
完整的例子:
线程1:
public class Thread_test1 extends Thread{
public void run() {
String name=Thread.currentThread().getName();
CommonService commonService=new CommonService();
commonService.test(name);
}
}
线程2:
public class Thread_test2 extends Thread{
public void run() {
String name=Thread.currentThread().getName();
CommonService commonService=new CommonService();
commonService.test(name);
}
}
资源:
public class CommonService {
private static int num=0;
public void test(String name) {
synchronized(this.getClass().getName()){
String name_=this.getClass().getName();
Class class_=com.test_thread.service.CommonService.class;
String class_name=class_.getName();
System.out.println(name_+"-"+class_name);
for(int i=0;i<10;i++){
num=num+1;
Date date=new Date();
for(int j=0;j<1000000000;j++){
}
System.out.println("name:"+name+",num:"+num+",time:"+date.getTime());
}
}
}
}
测试类:
public class TestMain {
public static void main(String[] args) {
Thread_test1 test1=new Thread_test1();
Thread_test2 test2=new Thread_test2();
test1.start();
test2.start();
}
}
阅读全文
0 0
- Java多线程之synchronized
- Java多线程之synchronized
- Java同步之synchronized
- Java同步之synchronized
- JAVA之synchronized认识
- Java之synchronized加鎖範圍
- Java之Synchronized
- java多线程之synchronized
- java之关键字synchronized
- java并发之synchronized
- java之synchronized
- Java同步之synchronized
- Java synchronized之“可重入锁”
- Java之synchronized
- Java关键字之synchronized
- java并发之synchronized
- java多线程之synchronized
- Java关键字之synchronized
- java之StringReader类
- 简要介绍下tensorflow的计算图
- java生涯第一年
- eclipse创建网页项目常见错误
- StringUtils判断字符串是否为空的方法
- java之synchronized
- About Nanomsg
- Git使用教程
- 内网搭建gitlab服务
- Mac电脑Tomcat下载及安装(详细)
- java之xml文件中删除节点
- Mybatis关联查询
- leetcode 638. Shopping Offers 递归求解最佳购物优惠
- bzoj4819 [Sdoi2017]新生舞会 01分数规划+二分图最优匹配