57、Android线程有没有上限

57、Android线程有没有上限,第1张

概述分析:Android系统会给每个应用分配一个内存空间(不同的系统分配的内存大小不同),这块内存空间大小是有限的。创建线程需要占用内存空,不可能拿有限的内存空间创建无限的线程。结论:Android线程是有上限的。如果应用创建线程的数量过多,而没有及时释放会导致OOM测试代码:priv

分析:
AndroID系统会给每个应用分配一个内存空间(不同的系统分配的内存大小不同),这块内存空间大小是有限的。
创建线程需要占用内存空,
不可能拿有限的内存空间创建无限的线程。

结论:
AndroID线程是有上限的。如果应用创建线程的数量过多,而没有及时释放会导致OOM

测试代码:

private voID createThread() {        while (true) {            new Thread(new Runnable() {                @OverrIDe                public voID run() {                    try {                        long thread = Thread.currentThread().getID();                        Log.d("creatthread", "开启线程:" + thread);                        Thread.sleep(1000 * 1000);                    } catch (InterruptedException e) {                        e.printstacktrace();                    }                }            }).start();        }    }

报错日志:

 D/creatthread: 开启线程:11000 .... D/creatthread: 开启线程:18101 W/libc: pthread_create Failed: Couldn't mprotect TLS: Out of memory W/zygote64: Throwing OutOfMemoryError "pthread_create (1040KB stack) Failed: Try again" D/AndroIDRuntime: Shutting down VM2019-08-06 11:34:45.133 25384-25384/com.cloud.wd.custom E/AndroIDRuntime: FATAL EXCEPTION: main    Process: com.cloud.wd.custom, PID: 25384    java.lang.OutOfMemoryError: pthread_create (1040KB stack) Failed: Try again        at java.lang.Thread.nativeCreate(Native Method)        at java.lang.Thread.start(Thread.java:733)        at com.cloud.wd.custom.MainActivity.createThread(MainActivity.java:159)        at com.cloud.wd.custom.MainActivity.access0(MainActivity.java:29)        at com.cloud.wd.custom.MainActivity.onClick(MainActivity.java:125)        at androID.vIEw.VIEw.performClick(VIEw.java:6311)        at androID.vIEw.VIEw$PerformClick.run(VIEw.java:24833)        at androID.os.Handler.handleCallback(Handler.java:794)        at androID.os.Handler.dispatchMessage(Handler.java:99)        at androID.os.Looper.loop(Looper.java:173)        at androID.app.ActivityThread.main(ActivityThread.java:6653)        at java.lang.reflect.Method.invoke(Native Method)        at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)        at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:821)

如有错误,请求指正

总结

以上是内存溢出为你收集整理的57、Android线程有没有上限全部内容,希望文章能够帮你解决57、Android线程有没有上限所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1112341.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存