线程和进程的学习一直是一个难点。
多线程的实现可以使用两种,一种是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;
}
}
|
|