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

王野天津音乐广播电台图片优化技术基础

王野天津音乐广播电台图片,优化技术基础,丹阳网站制作,led视频网站建设有三种:分别是继承Thread类、实现Runnable接口、实现Callable接口。 第一种需要重写父类Thread的run()方法,并且调用start()方法启动线程。 class ThreadTask extends Thread {public void run() {System.out.println("看完⼆哥的 Java 进阶之路&a…

有三种:分别是继承Thread类、实现Runnable接口、实现Callable接口。

第一种需要重写父类Thread的run()方法,并且调用start()方法启动线程。

class ThreadTask extends Thread {public void run() {System.out.println("看完⼆哥的 Java 进阶之路,上岸了!");}public static void main(String[] args) {hreadTask task = new ThreadTask();task.start();	}
}

这种方法缺点是,如果ThreadTask已经继承了另外一个类,就不能继承Thread类了,因为Java不支持多重继承。

第二种需要重写Runnable接口的run()方法,并将实现类的对象作为参数传递给Thread对象的构造方法,最后调用start()方法启动线程。

class RunnableTask implements Runnable {public void run() {System.out.println("看完Java 进阶之路,上岸了!");}public static void main(String[] args) {RunnableTask task = new RunnableTask();Thread thread = new Thread(task);thread.start();}
}

这种方法的优点就是可以避免Java的单继承限制,并且更符合面向对象的编程思想,因为Runnable接口将任务代码和线程控制的代码解耦了。

第三种需要重写 Callable 接⼝的 call() ⽅法,然后创建 FutureTask 对象,参数为 Callable 实现类的对象;紧接着创建 Thread 对象,参数为 FutureTask 对象,最后调⽤ start() ⽅法启动线程。

class CallableTask implements Callable<String> {public String call() {return "看完Java 进阶之路,上岸了!";}public static void main(String[] args) throws ExecutionException, InterruptedException {CallableTask task = new CallableTask();FutureTask<String> futureTask = new FutureTask<>(task);Thread thread = new Thread(futureTask);thread.start();System.out.println(futureTask.get());}
}

一个8G的系统最多能创建多少个线程

理论上大约8000个

创建线程的时候,⾄少需要分配⼀个虚拟机栈,在 64 位操作系统中,默认⼤⼩为 1M,因此⼀个线程⼤约需要 1M 的内存。

但 JVM、操作系统本身的运⾏就要占⼀定的内存空间,所以实际上可以创建的线程数远⽐ 8000 少。

详细解释⼀下。

可以通过 java -XX:+PrintFlagsFinal -version | grep ThreadStackSize 命令查看 JVM 栈的默认⼤⼩。

其中 ThreadStackSize 的单位是字节,也就是说默认的 JVM 栈⼤⼩是 1024 KB,也就是 1M。

启动一个Java程序,你能说说里面有哪些线程吗?

首先是main线程,这是程序执行的入口。

然后是垃圾回收线程,它是⼀个后台线程,负责回收不再使⽤的对象。

还有编译器线程,⽐如 JIT,负责把⼀部分热点代码编译后放到 codeCache 中。

可以通过下面的代码检测:

class ThreadLister {public static void main(String[] args) {// 获取所有线程的堆栈跟踪Map<Thread, StackTraceElement[]> threads = Thread.getAllStackTraces();for (Thread thread : threads.keySet()) {System.out.println("Thread: " + thread.getName() + " (ID=" + thread.getId() +")");}}
}

结果如下所示:

Thread: Monitor Ctrl-Break (ID=5)
Thread: Reference Handler (ID=2)
Thread: main (ID=1)
Thread: Signal Dispatcher (ID=4)
Thread: Finalizer (ID=3)

简单解释下:

Thread: main (ID=1) - 主线程,Java 程序启动时由 JVM 创建。

Thread: Reference Handler (ID=2) - 这个线程是⽤来处理引⽤对象的,如软引⽤、弱引⽤和虚引⽤。负责清理被 JVM 回收的对象。

Thread: Finalizer (ID=3) - 终结器线程,负责调⽤对象的 finalize ⽅法。对象在垃圾回收器标记为可回收之前,由该线程执⾏其 finalize ⽅法,⽤于执⾏特定的资源释放操作。

Thread: Signal Dispatcher (ID=4) - 信号调度线程,处理来⾃操作系统的信号,将它们转发给 JVM 进⾏进⼀步处理,例如响应中断、停⽌等信号。

Thread: Monitor Ctrl-Break (ID=5) - 监视器线程,通常由⼀些特定的 IDE 创建,⽤于在开发过程中监控和管理程序执⾏或者处理中断。

http://www.dtcms.com/wzjs/222534.html

相关文章:

  • 做网站用什么后台百度竞价排名查询
  • 网站设计就业怎么样数据查询网站
  • wordpress w按钮关系网站优化公司
  • 上海正规网站定制小程序开发教程
  • b2b电子商务网站调研报告word文档形式足球排行榜前十名
  • 做关于灯饰的网站品牌广告和效果广告的区别
  • 成都网站建制作网络营销推广公司
  • 安康公司做网站360站长工具
  • 网站效果图可以做动态的嘛百度贴吧的互动社区
  • 网站有死链接怎么办昆明seo
  • 网络组建毕业论文seo是什么意思电商
  • 德州做网站dzqifanb站视频推广app
  • 自己做的网站 网站备案流程阿里seo排名优化软件
  • 上海网站建设网站制百度指数的数值代表什么
  • 有哪些做司考真题的网站宁波网站制作设计
  • 微网站与手机网站免费seo网站自动推广
  • 沈阳网站制作思路竞价推广平台
  • dz网站自己做的模板放在哪里上海网络推广培训机构
  • 沈阳做网站建设小学生简短小新闻十条
  • 免费的推广网站有哪些人民网疫情最新消息
  • 做网站被骗算诈骗吗安徽建站
  • 有哪些好的做兼职的网站百度指数在哪里看
  • 郑州微网站建设百度指数1000搜索量有多少
  • 可以做项目的网站武汉网站维护公司
  • 贵州网站建设seo如何创建自己的网站
  • 网站开发和app开发的区别西安企业seo
  • 云浮市哪有做网站的搜多多搜索引擎入口
  • 潍坊路通工程建设有限公司网站苏州关键词seo排名
  • 如何用手机建立网站千锋教育培训收费一览表
  • 网站vr用什么做微信朋友圈广告推广