Java多线程学习笔记1

1。 volatile关键字用于告诉 VM:它不应当保存变量的私有拷贝,而应当直接与共享拷贝交互。

2。synchronized关键字确保在某一时刻,只有一个线程调用这个方法。

 

/**
 * 演示两个线程引用同一个对象与两个线程分别引用两个对象时的同步问题
 * 
 * 
@author midi13
 * 
@since 2006
 * 
 
*/

public class SynTest {
    
private String firstName, lastName;

    
private synchronized void setName(String firstName, String lastName) {
        print(
"entering setName");
        
this.firstName = firstName;
        print(
"Set first name have done firstName=" + this.firstName);
        
try {
            Thread.sleep(
1000);
        }
 catch (InterruptedException e) {
        }


        
this.lastName = lastName;
        print(
"set last name have done,and leave setName() method.firstName="
                
+ this.firstName + " lastName=" + this.lastName);
    }


    
private void print(String msg) {
        String thread 
= Thread.currentThread().getName();
        System.out.println(thread 
+ "" + msg);
    }


    
public static void main(String[] args) {
        
// 必需声明为final,否则runnable里面的run()方法不能访问。
        final SynTest test1 = new SynTest();

        
final SynTest test2 = new SynTest();
        Runnable run1 
= new Runnable() {
            
public void run() {
                test1.setName(
"arzu""guli");
            }

        }
;
        Thread threadOne 
= new Thread(run1, "threadOne");
        threadOne.start();

        
try {
            Thread.sleep(
200);
        }
 catch (InterruptedException e) {
        }

        Runnable run2 
= new Runnable() {
            
public void run() {
                
// 如果这个线程引用的是对象test2,则setName方法不需要同步,也可以保证程序达到预期目的。
                test1.setName("kang""midi");
            }

        }
;

        Thread threadTwo 
= new Thread(run2, "threadTwo");
        threadTwo.start();
        System.out.println(
"main() exit");
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值