A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xman20 中级黑马   /  2015-3-21 10:35  /  822 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程和进程的学习一直是一个难点。



         多线程的实现可以使用两种,一种是extends Thread,一种是Implements Runnable。



         相比extends Threads,更好的方式是implements Runnable。

因为JAVA只支持单继承,如果只继承了Thread,就没法去继承其他的类,如果实现Runaable接口,那么线程的代码块只是其自身的一部分,通常情况下,更推荐使用实现Runnable,而非继承Threads.



         线程运行中还有一个锁的概念,线程的安全性是一个很重要的问题,在之前自己写过的android程序中,UI线程只有主线程才能修改,如果是其他线程想修改UI,必须要通知主线程并进行相应的修改。



         多线程运行对于用户体验性的提升有非常大的帮助,之前自己曾经在android 2.3的版本中直接在主函数中写入网络连接下载信息并在主界面中显示,导致界面很久无响应,后来改用异步任务,不会影响到主界面的显示,android4.0以后也禁止在主线程之中,写入网络连接程序。



         锁是一个优秀的控制程序,可以保证多线程的安全性,但是凡事有利有弊,牺牲的是程序的响应速度,当一个程序占用有锁的方法的时候,其他程序只能等待。数据库中的处理机制也应该也是用的同样的机制,所以进行分级制,这是一个不可调和的矛盾,只能根据实际需要,在安全性和效率上选择一个平衡。



      之前写的测试题总是问了一个单例模式,不知道是啥,视频中讲到了,做个记录。



package itheima.com;



public class Test5 {

//创建一个对象引用
private static Test5 s = null;
//定义一个空构造函数
    private Test5(){}
    //获得实例的函数
    public static Test5 getInstance()

   {

            if(s==null)
             synchronized(Test5.class)
             {
              if(s==null)
              {
              //若为空,创建一个对象
                    s = new Test5();
              }
                  
              
             }
            return s;

    }
}


1 个回复

倒序浏览
一抹浓茶 来自手机 中级黑马 2015-3-21 10:36:50
沙发
顶一个,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马