java + 线程系列之一些定义(小结)

来源:互联网 发布:sql数据库文件怎么打开 编辑:程序博客网 时间:2024/06/05 16:15

**1,原子性操作:
原子性就是说一个操作不可以被中途CPU暂停然后调度,即不能被中断,要么就执行完,要不就不执行,如果一个操作是原子性的,那么在多线程环境下,就不会出现变量被休息室等奇怪的问题**

**2, 多态:
是指允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式 . 同一件事发生在不同的对象会产生不同的结果**

**3, 匿名内部类
匿名类是不能有名称的类,所以没有办法引用他们, 必须在创建时,作为new语句的一部分来声明它们, 这就要采用另一种形式的new语句,如下所示: new<类或接口><类的主体>这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,它还创建那个类的一个新的实例,并把它们作为语句的结果而返回.要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体.如果匿名类对另一个类进行扩展,它的主体可以访问类的郑源,覆盖它的方法等等,这和其他任何标准的类都是一样的,若果匿名类实现了一个接口,他的接口必须实现接口的方法

1.怎样判断一个匿名类的存在啊?
看不见名字,感觉只是父类new出一个对象而已,没有匿名类的名字。

一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。
但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。
因为我们知道,一个抽象类是不能直接new 的,必须先有实现类了我们才能new出它的实现类。

  new Thread(new Runnable() {            @Override            public void run() {                pdl.p1();            }        }).start();

在使用匿名内部类时,要记住以下几个原则:
 ·匿名内部类不能有构造方法。
 ·匿名内部类不能定义任何静态成员、方法和类。
 ·匿名内部类不能是public,protected,private,static。
 ·只能创建匿名内部类的一个实例。
·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
 ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
·内部类只能访问外部类的静态变量或静态方法。

**

**4, 同步锁: synchronized
a, 把synchronized当做函数修饰符时
,也就是同步方法,那这时synchronized锁定那个对象呢,它锁定的是调用这个同步方法对象,也就是说,当一个对象P1在不同的线程中执行这个同步方法时,它们之间会形成互斥,达到同步的效果,但是这个对象所属的Class所产生的另一个对象P2却可以任意调用这个被加了synchronized关键字的方法

b, 同步可以理解成等待某一件事情结束才能开始做下一件事情
同步:是阻塞的,就是你做了这件事情,没做完就做不了其他的事情了
**

 //锁是什么    // 锁是一个对象    // 假如A线程先访问这个del方法    // 那么锁对象就会被A线程持特有其他(BCD)想访问del方法的时候    // 就会发现锁对象被A线程拿走了,    // 那么(BCD)就都不能进入到del方法中    // 当A线程执行完毕del方法,会将锁对象释放出来    // 这时候(BCD)线程再争夺执行权.    // 谁抢到了,谁来执行sel方法 谁执行sel方法,    // 那么谁就又拿到了锁对象    // 这个时候剩下的两个线程就又进不来del方法中了    //使用关键字的两种方式    //1, 在方法声明上,使用synchronized关键字修饰    //2, 使用synchronized代码块将要执行的代码包起来    public synchronized void del() {            for (int i = 0; i < 2500; i++) {                count -= 1;                System.out.println(Thread.currentThread().getName() + "========" + count);            }    }    //2, 使用synchronized代码块将要执行的代码包起来    public void del1() {        synchronized (this) {            for (int i = 0; i < 2500; i++) {                count -= 1;                System.out.println(Thread.currentThread().getName() + "========" + count);            }        }    }
原创粉丝点击