当前位置: 首页 > news >正文

外贸网站平台排名百度竞价平台官网

外贸网站平台排名,百度竞价平台官网,00908网络营销与策划,网站做淘宝客还行吗线程的几种创建方式 new Thread:可复写Thread#run方法。也可以传递Runnable对象,更加灵活。缺点:缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统的资源导致死机或oom。 new Thread(new…

线程的几种创建方式

  • new Thread:可复写Thread#run方法。也可以传递Runnable对象,更加灵活。
  • 缺点:缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统的资源导致死机或oom。
 new Thread(new Runnable() {@Overridepublic void run() {}}).start();class MyThread extends Thread{@Overridepublic void run() {super.run();}}new MyThread().start();
  • AsyncTask,轻量级的异步任务工具类,提供任务执行的进度回调给UI线程
  • 场景:需要知晓任务执行的进度,多个任务串行执行
  • 缺点:生命周期和宿主的生命周期不同步,有可能发生内存泄漏(解决方案:将AsyncTask定义为静态内部类)
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;public class ConcurrentTest {public static void test(Context context){class MyAsyncTask extends AsyncTask<String,Integer,String> {@Overrideprotected String doInBackground(String... strings) {for (int i=0;i<10;i++){publishProgress(i*10);}return strings[0];}@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);Log.e("hzulwy","onPostExecute: "+s);//输出:execute myAsyncTask}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);Log.e("hzulwy","onProgressUpdate: "+values[0]);//输出:10-90}}//适用于需要知道任务执行进度并更新UI的场景MyAsyncTask myAsyncTask = new MyAsyncTask();//默认串行myAsyncTask.execute("execute myAsyncTask");//并发执行myAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"execute myAsyncTask");//以这种方式提交的任务,所有任务串行执行,即先来后到,但是如果其中有一条任务休眠了,或者执行时间过长,后面的任务将被阻塞AsyncTask.execute(new Runnable() {@Overridepublic void run() {Log.e("hzulwy","run:AsyncTask.execute");}});//适用于并发任务执行AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() {@Overridepublic void run() {Log.e("hzulwy","run: THREAD_POOL_EXECUTOR AsyncTask.execute");}});}
}
  • HandlerThread:适用于主线程需要和工作线程通信,适用于持续性任务,比如轮询的场景,所有任务串行执行。
  • 缺点:不会像普通线程一样主动销毁资源,会一直运行着,所以可能会造成内存泄漏 ,需要程序员手动释放
public class ConcurrentTest {private static final int MSG_WHAT_1 = 1;public static void test1(){HandlerThread handlerThread = new HandlerThread("handler-thread");handlerThread.start();handlerThread.quitSafely();//在适当的地方释放资源MyHandler myHandler = new MyHandler(handlerThread.getLooper());myHandler.sendEmptyMessage(MSG_WHAT_1);}static class MyHandler extends Handler{public MyHandler(Looper looper){super(looper);}@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);Log.e("hzulwy","handleMessage: "+msg.what);//输出:1Log.e("hzulwy","handleMessage: "+Thread.currentThread().getName());//输出:handler-thread}}
}
  • IntentService:适用于我们的任务需要跨页面读取任务执行的进度,结果。比如后台上传图片,批量操作数据库等。任务执行完成后,就会自我结束,所以不需要手动stopservice,这是它与service的区分。IntentService包含了service的全部特色。
    class MyIntentService extends IntentService{@Overrideprotected void onHandleIntent(@Nullable Intent intent) {int command = intent.getIntExtra("command",0);//...}context.startService(new Intent());}
  • ThreadPoolExecutor:适用于快速处理大量耗时较短的任务场景(使用最广泛)
        Executors.newCachedThreadPool();//线程可复用线程池Executors.newFixedThreadPool(1);//固定线程数量的线程池Executors.newScheduledThreadPool(1);//指定定时任务的线程池Executors.newSingleThreadExecutor();//线程数量为1的线程池

线程的优先级

        Thread thread = new Thread();thread.start();int ui_proi = Process.getThreadPriority(0);int th_proi = thread.getPriority();//输出结果ui_proi =5;th_proi = 5;
  • 线程的优先级具有继承性,在某线程中创建的线程会继承此线程的优先级。那么我们在UI线程中创建了线程,则线程优先级是和UI线程优先级一样,平等的和UI线程抢占CPU时间片资源。
  • JDK api,限制了新设置的线程的优先级必须为[1~10],优先级priority的值越高,获取cpu时间片的概率越高。UI线程的优先级为5。使用这种方式来设置优先级对线程影响的概率并不大。
  • Android api,可以为线程设置更加精细的优先级(-20~19),优先级的值越低,获取CPU时间片的概率越高。UI线程优先级为-10。推荐使用,影响较大,而且与JDK的方式设置线程优先级互不影响。

Process.setThreadPriority(-10);

线程的几种状态与常用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//需要保证wait-notify方法的调用顺序,即先wait后notify,否则会有假死的情况private volatile boolean hasNotify = false;final Object object = new Object();public void test2(){Thread thread1 = new Thread(new Runnable1());Thread thread2 = new Thread(new Runnable2());thread1.start();thread2.start();}class Runnable1 implements Runnable{@Overridepublic void run() {Log.e("hzulwy","run:thread1 start");synchronized (object){try {if(!hasNotify){//规避假死情况object.wait(1000);}} catch (InterruptedException e) {e.printStackTrace();}}Log.e("hzulwy","run:thread1 end");}}class Runnable2 implements Runnable{@Overridepublic void run() {Log.e("hzulwy","run:thread2 start");synchronized (object){object.notify();hasNotify = true;}Log.e("hzulwy","run:thread2 end");}}
    public void test2(){//一个线程需要等待另一个线程执行完才能继续的场景Thread thread = new Thread(new Runnable() {@Overridepublic void run() {Log.e("hzulwy","run: 1"+System.currentTimeMillis());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}Log.e("hzulwy","run: 2"+System.currentTimeMillis());}});thread.start();try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}//等thread执行完成后才会执行下面的日志Log.e("hzulwy","test: 3"+System.currentTimeMillis());//输出结果://run: 1//run: 2//test: 3}
http://www.dinnco.com/news/33368.html

相关文章:

  • html5单页模板五年级上册语文优化设计答案
  • 网站建设方法网络优化工作应该怎么做
  • 设计师网站导航今日发生的重大国际新闻
  • 做调查问卷的网站有什么seo 推广怎么做
  • 怎么建立网站管理系统2345网址大全设主页
  • 台州网站制作 外贸软件网站排行榜
  • 手机网站的域名网络营销渠道有哪几种
  • 怎么做谷歌收录的网站seo企业顾问
  • 织梦做的网站别人提交给我留的言我去哪里看seo自媒体培训
  • 电子商务网站建设 实验分析免费顶级域名申请网站
  • 深圳有做网站最近价格百度推广官网电话
  • 互联网+中央督查关键词优化的主要工具
  • 网站建设与推广的步骤推广平台都有哪些
  • 手机老是下载一些做任务的网站谷歌海外推广怎么做
  • 做网站是靠什么赚钱的成都搜索优化排名公司
  • win8式网站后台模板成都seo招聘
  • 新手怎么做自己网站广告谷歌seo工具
  • 四川做网站的公司哪家好辽宁网站seo
  • 网站运营需要 做哪些工作内容品牌策略
  • 网站建设 系统维护企业网站建设的作用
  • 做建材商城网站互联网营销师培训教材
  • 西安建委官网百度关键词优化服务
  • 如何免费制作网站seo资料
  • 营销型网站建设案例分析全球搜索引擎排名
  • 关于解决网站 建设经费的请示网络营销的成功案例有哪些
  • 做电商网站需要的证交换链接的其它叫法是
  • 建设网站的相关费用上海好的网络推广公司
  • 校园论坛网站怎么做加盟教育培训机构
  • 怎么免费做网站推广陕西seo优化
  • 模板网站建设公司哪个好查看百度关键词价格