当前位置:  编程技术>移动开发
本页文章导读:
    ▪改动button背景        更改button背景 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:dra.........
    ▪ 线程根本        线程基本 Java 多线程程序设计要点: http://www.diybl.com/course/3_program/java/javajs/20100522/203539.html      所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要.........
    ▪ Objective-C中判断字符串是否包含其余字符串       Objective-C中判断字符串是否包含其他字符串 -(BOOL) hasPrefix:(NSString *) astring;检查字符串是否以astring开头; -(BOOL) hasSuffix:(NSString *) astring;检查字符串是否以astring结尾; 使用方式: NSString *filenam.........

[1]改动button背景
    来源: 互联网  发布时间: 2014-02-18
更改button背景
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

    
[2] 线程根本
    来源: 互联网  发布时间: 2014-02-18
线程基本

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

  •  public void setState(boolean state) {  
  •         synchronized (this.state) {  
  •             this.state = state;  
  •         }  
  •     } 
  •  

    方法3:使用锁

  • public void setState(boolean state) {  
  •         lock.lock();  
  •         try {  
  •             this.state = state;  
  •         } finally {  
  •             lock.unlock();  
  •         }  
  •     }  
  •  

    方法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

     

     

  • public class ThreadTest{   
  •   public void test(){   
  •      Object lock=new Object();   
  •      synchronized (lock){   // 每个线程进来都会执行Object lock=new Object();每个线程都有自己的lock,根本不存在锁竞争
  •         //do something   
  •      }   
  •   }   
  • }  
  •  

     


    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
    
    

        
    [3] Objective-C中判断字符串是否包含其余字符串
        来源: 互联网  发布时间: 2014-02-18
    Objective-C中判断字符串是否包含其他字符串

    -(BOOL) hasPrefix:(NSString *) astring;检查字符串是否以astring开头;

    -(BOOL) hasSuffix:(NSString *) astring;检查字符串是否以astring结尾;
    使用方式:
    NSString *filename=@"hello,world";
    if([filename hasPrefix:@"hello"]){
    ...
    }
    if([filename hasSuffix:@"world"]){
    ...
    }

    如果想知道字符串内的某处是否包含其他的字符串,使用rangeOfString:
    -(NSRange) rangeOfString:(NSString *) astring;
    将rangeOfString:发送给一个NSString对象时,传递的参数时要查找的字符串。它会返回一个NSRange struct来告诉你一个与这个字符串相匹配的部分从哪里开始以及匹配上的字符个数。
    NSRange range;
    range=[filename rangeOfString:@"o,world"];

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3