res/drawable 新建XML文件button.xml
内容如下
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@drawable/m07" /> <item android:drawable="@drawable/m07" /> </selector>
再在res/layout
<Button android:layout_width="wrap_content" android:text="@string/button_name" android:id="@+id/button1" android:layout_height="wrap_content" android:background="@drawable/m07" > </Button>
drawable添加m07.jpg
Java 多线程程序设计要点:
http://www.diybl.com/course/3_program/java/javajs/20100522/203539.html
所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。
方法1:使用ThreadLocal
private final static ThreadLocal<Boolean> state = new ThreadLocal<Boolean>();
方法2:使用同步关键字synchronized
方法3:使用锁
方法4:使用Atomic类型
private AtomicBoolean state = new AtomicBoolean();
用volatile修饰变量,不能实现类似的功能 volatile有可见性,但没有原子性 解释见下面:
转载 :http://www.iteye.com/topic/1124373
volatile只是在线程内存和“主”内存间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源
public static volatile int n = 0 ; 1000
因是声明为volatile的简单变量如果当前值由该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:
n = n + 1 ;
n ++ ;
在使用volatile关键字时要慎重,并不是只要简单类型变量使用volatile修饰,对这个变量的所有操作都是原来操作,当变量的值由自身的上一个决定时,如n=n+1、n++ 等,volatile关键字将失效,只有当变量的值和自身上一个值无关时对该变量的操作才是原子级别的,如n = m + 1,这个就是原级别的。所以在使用volatile关键时一定要谨慎,如果自己没有把握,可以使用synchronized来代替volatile
ThreadLocal与synchronized多线程并发访问区别1
http://www.easy518.com/bbs/?p=23
synchronized(core){ // 锁住对象!
core.put();
}
public synchronized void put(){// 锁住对象方法!
if (count>=3) {
System.out.println("生产者被阻塞");
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return;
}
count++;
this.notify();
}
java.lang.IllegalMonitorStateException
首先你要了解这个异常为什么会抛出,这个异常会在三种情况下抛出: 1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法; 2>当前线程不含有当前对象的锁资源的时候,调用obj.notify()方法。 3>当前线程不含有当前对象的锁资源的时候,调用obj.notifyAll()方法。
由线程引发的内存模型分析:
http://www.blogjava.net/qileilove/archive/2011/09/22/359262.html
http://jameswxx.iteye.com/blog/806968
http://guibin.iteye.com/blog/1172731
http://wenku.baidu.com/view/4afaaf2e453610661ed9f4dc.html
-(BOOL) hasPrefix:(NSString *) astring;检查字符串是否以astring开头;