可以启动16个线程。八核十六线程是指利用超线程技术将一个物理核心模拟成两个逻辑核心。理论上十六个线程应该像十六个物理核心一样同时执行,所以设备管理器和任务管理器里会显示十六个核心,但实际上并不是真正的八个核心。八核十六线程是物理八核加虚拟八核。
java中有四种创建线程的方法,可以通过是否有返回值来区分:
不归路
1.创建一个任务,实现runnable接口,并重写run()。
2.继承thread类并重写run()
有回报
1.实现callable接口,重写call(),用futuretask包装callable,作为任务传入线程构造器;
2.使用线程池。
首先,让我们让我们看看线程之间的状态及其相互转换:
实现runnable接口因为java只支持单一继承,你可以如果继承thread类就不要继承其他类,所以更推荐让thread类实现runnable接口来实现继承。将runnbale作为参数传递给thread的构造函数来创建thread。
继承thread类,重写run()创建一个线程只需要继承thread类,然后在run()方法中写下线程要实现的任务;通过调用start方法启动线程,但不能直接调用run()方法。
①thread类本质上实现了runnable接口,代表一个线程的实例。
②runnable接口只有一个抽象的run()方法。
③启动线程的唯一方法是通过thread类的start()方法。
④start()方法是一个原生方法,会启动一个新线程,执行run()方法。
⑤自定义类直接继承thread,重写run()方法,这样就可以启动一个新的线程,执行自己定义的run()方法。
使用可调用接口创建并启动①定义myclass实现可调用接口;
(2)重写call()嵌入执行的代码逻辑;
③创造未来任务的对象;run()在futuretask中定义,call()在run()内部调用,并保存call()的返回值。
futuretaskfuturetask新建futuretask(newmyclass())
④创建线程对象;
线程线程新线程(未来etask)//传入参数runnable接口
⑤开始线程()
⑥可以通过futuretask类的get()方法得到线程执行后的返回值,即call的返回值。()
通过线程池创建线程
①新线程池执行器(…)
(2)创建任务实现callable并重写run()方法;
③通过线程池的execute()或submit()将任务命令传入线程池。
④获取返回值。
示例代码如下:
创建汇总线程有四种主要分为返回和不返回,根据使用场景选择。
①如果不需要返回,线程数少,建议实现runnable接口,重写run();
②如果需要返回且线程数量较少,建议实现可调用接口,重写call(),由futuretask将其包装为runnable,然后作为参数传入线程构造方法创建线程;
(3)如果线程较多,建议按线程池创建:execute提交无返回操作的任务,提交有返回操作的任务。
欢迎关注作者,继续分享有价值高质量的建筑学文章。