1、数据库多线程访问安全实现
DBHelper.class
public class DBHelper extends SQLiteOpenHelper {
public static final String DB_NAME="download.db";
public static final int VERSION=1;
public static final String SQL_CREATE="create table thread_info(_id integer primary key autoincrement," +
"thread_id integer,url text,start integer,end integer,finished integer)";
public static final String SQL_DROP="drop table if exists thread_info";
private DBHelper(Context context) {
super(context, DB_NAME , null, VERSION);
}
private static DBHelper dbHelper=null;
/**
* 单例返回
* @param context
* @return
*/
public static DBHelper getInstance(Context context){
if (dbHelper==null){
dbHelper=new DBHelper(context);
}
return dbHelper;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DROP);
db.execSQL(SQL_CREATE);
}
}
ThreadDaoImpl.class
public synchronized void updateThread(String url, int thread_id, int finished) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL(updateSQL, new Object[]{finished, thread_id,url});
db.close();
}
2、线程池使用
//创建线程池 public static ExecutorService executorService=Executors.newCachedThreadPool(); //线程池使用 executorService.execute(downloadThread); 2.1 接口:ExecutorService Executors类提供四种线程池 newCachedThreadPool()//带缓存的线程池,线程开的很多的时候,当线程不使用了就被缓存起来,当系统需要时又从缓存的线程池中取出使用;大小没有限制是由系统支持的线程数决定 newFixedThreadPool(int)//固定数量的线程池 newScheduledThreadPool()//周期性定时去执行某些任务,线程数没有限制 newSingleThreadExecutor()//只有单个任务的线程池代码 点击打开链接