Java基础复习——多线程
来源:互联网 发布:mac finder经典页面 编辑:程序博客网 时间:2024/06/03 21:34
1 Thread类
1.1 interupt方法的demo
// file name: MyRunnable.javapublic class MyRunnable implements Runnable { public int name = 0; @Override public void run() { while (true) { System.out.println("my name is " + name); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); //当调用thread.interrupt()时会立马停止Thread.sleep(100) //并抛出异常,这个时候在catch语句中加入break跳出循环体即可结束线程。 break; } } }}
测试类:
public class ThreadDemo { public static void main(String[] args) { MyRunnable mr = new MyRunnable(); mr.name = 1; Thread thread = new Thread(mr); thread.start(); // add debug breakpoint thread.interrupt(); }}
1.2 测试win7系统支持的最大线程数(由于8GB内存不够,没测出来)
线程类:
public class MyRunnable implements Runnable { public int name = 0; @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); break; } } }}
测试类:
public class ThreadDemo { public static void main(String[] args) { List<Thread> list = new ArrayList<>(); for (int j = 0; j<100; j++) { System.out.println("\n\n\n\n------------------" + list.size() + "\n------------------------\n\n\n\n\n"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } for (int i = 0; i < 1000; i++) { MyRunnable mr = new MyRunnable(); mr.name = i; Thread thread = new Thread(mr); list.add(thread); thread.start(); } } }}
结果:14,000线程时,我的电脑的8GB的内存撑不住了
改进后进程类:
public class MyRunnable implements Runnable { @Override public void run() { while (true) { try { Thread.sleep(100000); } catch (InterruptedException e) { e.printStackTrace(); break; } } }}
改进后测试类:
public class ThreadDemo { public static void main(String[] args) { for (int j = 0; j<100; j++) { System.out.println("\n\n\n\n------------------" + (j+1)*1000 + "\n------------------------\n\n\n\n\n"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } for (int i = 0; i < 1000; i++) { MyRunnable mr = new MyRunnable(); Thread thread = new Thread(mr); thread.start(); } } }}
改进后结果:100,000线程,内存满了,但是会自动清理。
图中最后内存占用跳水是因为我杀掉了jvm
以下内容没有验证过,是linux下的
转自http://blog.csdn.net/u013673976/article/details/51788566
系统可生成最大线程数cat /proc/sys/kernel/threads-max这个值很大,tomcat进程的全部线程数肯定没有超过它,如果实际线程数比它大可改大(实际可能是代码问题,开启了太多线程)。进程最大线程数ps -eLf | grep 项目名 | wc -l 查看单个项目线程数,启动失败的这个项目线程数一般在600左右cat /proc/sys/vm/max_map_count65530这个值没有问题,jvm的启动参数为-Dconfig.server.maxThreads=3000,也没有问题用户最大进程数ulimit -a其中max user processes就是表示用户的最大进程数,我的这个值很大,进程数也没有超过它。如果超过的话,可以修改最大进程数的配置vi /etc/security/limits.d/90-nproc.conf* soft nproc 1024root soft nproc unlimited上面可以看除了root用户外的所有用户均限制为1024,因此通过可以注释此行或者将值改大,保存后修改立刻生效#* soft nproc 1024root soft nproc unlimited整个系统已用的线程或进程数cat /proc/sys/kernel/pid_max该值是32678(32位Linux系统可创建的最大pid数是32678),查询当前整个系统已用的线程或进程数:pstree -p | wc -l,结果比32678稍小,问题就在这了vim /proc/sys/kernel/pid_max,改为65535保存退出的时候报错如下/proc/sys/kernel/pid_max E667 Fsync failed改成下面方式即可:echo "65535" > /proc/sys/kernel/pid_max不需要重启,保存后立刻生效,重启项目终于好了
阅读全文
0 0
- Java基础复习——多线程
- java基础复习 多线程
- 黑马程序员——java基础 多线程(复习)
- 黑马程序员—java基础复习—多线程
- Java复习笔记—多线程
- java基础复习-多线程UDP
- 【java基础】多线程--生产者消费者--复习
- JAVA基础复习二十三-多线程
- Java基础复习——Thread
- Java基础——复习启动篇
- Java基础复习——数据类型
- Java复习笔记—基础语法
- Java基础复习—(数组,数据类型)
- Java基础复习——(一)Java基础概述
- java基础——多线程
- Java基础——多线程
- Java基础——多线程
- Java基础——多线程
- 基于SurfaceView创建手机xml动态背景
- 浅谈后台程序运行
- 【word-break】
- 第一周 项目开山之作 写给自己的一句话
- AMCAT test完全数&字符串接龙
- Java基础复习——多线程
- 怎样安装Firebug和FirePath
- Django by example(NOTE 1)
- Codeforces Round #431 (Div. 2)
- SpringBoot 注解事务声明式事务
- Eclipse的Project Facets属性
- 公务员与选调生相关资料
- 安装maven的本地工程
- Hibernate继承映射