A. 一个java socket能处理多少线程
可以写个demo试一下啊,应该是可以的,socket接收到的消息只能被其中一个线程接收。线程1 和2 接受到的肯定不是同一个消息。会有先后之分。看你怎么控制。比如从接收的消息是ABCD,那么这相当于一个资源。线程1和2在这里拿消息,拿到之后,socket里面就少了,比如线程1拿到AB,线程2拿到CD
B. java多线程:一个程序能开多少条线程
看你服务器配置,理论上cpu核越多,主频越高开的线程越多。
C. java聊天程序为什么需要多线程
必然的要加多线程啊,不加也可以
家多线程的情况主要是在服务器端使用多线程异步执行信息的的推送
如果不加就只能一个一个依次处理信息,也就是多个用户同时发送信息到服务器之后,还要在服务器排队,先到的先推送,后到的等待前面的
D. 多线程跑一个程序,可以节约多少时间
理论上可以节约10倍的时间,但是因为创建线程也是需要时间的,所以运行时间为大于10s,至于小不小于100s不好说。
并不是所有情况都需要多线程优化,有些时候多线程优化反而会降低运行速度和编写难度
E. 多核CPU在处理单个单线程程序的时候速度不变。那在处理多个单线程程序的时候是只用一个核处理还是双核
只要设置没错的话,一个单线程程序会占用一个核心,虽然有传说中的超线程技术是逻辑核心提升一倍,但是物理核心空闲时间有限,所以当两个单线程挤到一个物理核心里那就会很慢。所以,你问题的答案就是处理多个单线程程序时,在不存在超线程技术时会调用相应数量(小于等于物理核心数)的核心进行处理。
我觉得是多线程先被提出,但是多线程之前,还有一个超线程技术,也就是最早出现的奔四超线程技术,就是将单物理内核模拟为双逻辑内核,所以对于不支持多线程的软件在处理时仍然是单线程,但是因为超线程技术,会在处理单线程软件时,将另一个单线程软件拉进来处理,直到出现多线程程序,然后再出现多内核,然后多内核超线程。
F. 设计一个程序,两个线程
/**
* 楼主,这个调试通过没问题的 Main.java
*/
public class Main{
int i = 1;
public static void main(String[] args){
Main m = new Main();
new Thread(new Increate(m)).start();
new Thread(new Decrease(m)).start();
}
public static void sleep(){
try{
Thread.sleep(1000L);
}catch(Exception e){
}
}
}
class Increate implements Runnable{
private Main main;
public Increate(Main m){
this.main = m;
}
public void run(){
int value;
while(true){
Main.sleep();
synchronized(main){
if(main.i == 2){
continue;
}
value = main.i++;
System.out.println(value);
}
}
}
}
class Decrease implements Runnable{
private Main main;
public Decrease(Main m){
this.main = m;
}
public void run(){
int value;
while(true){
Main.sleep();
synchronized(main){
if(main.i == 1){
continue;
}
value = main.i--;
System.out.println(value);
}
}
}
}
G. 编写一个多线程程序,此程序中包含2个线程,要求:第一个线程能够计算1+2+3+...+1000的值
package example_2;
public class Example3 extends Thread{
private int ip;
public Example3(int n){
ip = n;
}
public void run(){
int i = 0;
int total = 0;
for(;i <= ip;i++){
total += i;
}
System.out.println("total[" + ip + "] = " + total);
}
public static void main(String[] args) {
Example3 example3 = new Example3(1000);
Example3 example= new Example3(10);
example3.start();
example.start();
}
}
H. 一个最简单的Java程序有多少线程
有三种:
(1)继承Thread类,重写run函数
创建:
class xx extends Thread{
public void run(){
Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
}}
开启线程:
对象.start() //启动线程,run函数运行
(2)实现Runnable接口,重写run函数
开启线程:
Thread t = new Thread(对象) //创建线程对象
t.start()
(3)实现Callable接口,重写call函数
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
①Callable规定的方法是call(),而Runnable规定的方法是run().
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果
I. 一个程序有几个线程, 线程是什么东东
线程(thread, 台湾称 执行绪)是"进程"中某个单一顺序的控制流。也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。
线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。
在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的操作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度(affinity)。
有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。
进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但您必须小心,确保它们不会妨碍同一进程里的其它线程。
J. 我在一个程序中有多线程,大概开20个线程,每个线程采集一个数据,然后每次采集完成大概1秒钟时间
1、加锁 写入不能读取 读取不能写入
2、不要读取线程 采集线程在写入的时候直接进行展示就行了。
同时 设定合理的间隔时间 避免两个线程同时操作一条数据