当前位置:首页 » 编程语言 » java多线程编程实战

java多线程编程实战

发布时间: 2025-01-11 06:03:17

java多线程——singleThreadExecutor

singleThreadExecutor是Java多线程编程中一个重要的工具,通过Executors类的静态方法创建,其特性是仅由一个核心线程进行任务执行,类似于单线程模式处理所有任务。在单一核心线程因异常终止时,系统将自动启动一个新线程替代它,以确保任务的连续执行。这种线程池设计确保了任务的执行顺序与任务提交的顺序一致,保持了高效有序的处理流程。创建singleThreadExecutor的示例如下:

代码示例展示了ThreadPoolExecutor参数的设置,其中核心线程数和最大线程数均被设置为1,意味着系统中最多仅有一个线程在运行。缓冲队列采用LinkedBlockingQueue实现,其设计为无界队列,能够有效存储等待执行的任务,避免任务因队列容量限制而被阻塞。

通过singleThreadExecutor,开发者能够轻松创建一个单线程执行的线程池,这在需要严格控制任务执行顺序、避免线程竞争或简化多线程管理场景中尤为适用。同时,其自动线程替代机制在核心线程异常终止时提供了一定的容错能力,确保了程序的健壮性与稳定性。

⑵ 面向对象JAVA多线程怎么编程26个不同字母,颜色随机,大小,位置随机

main 方法
for(int i= 0;i<list。size;){
随机得到list下标
随机生成该字母对象的内容
test t = new test(字母对象)
t.start();
之后删除list该下标 (保证不同)
}
}

一共需要26个线程 每个线程1次

⑶ java多线程编程 仓库外有100袋麦子,现在需要创建4个对象来搬1到100袋麦子,麦子袋子上做了1到100的编号

开四个线程和一个大小为100的数组呗。。
数组里面存放当前某一个麦子是否已经被搬走了,线程每次都从头到尾扫一遍啊,访问数组需要加一个synchronized就行啦。
我付一下代码吧……
package wzy;

public class Test {

public static void main(String[] args) throws Throwable {
People p[] = new People[5];
Thread t[] = new Thread[5];
for(int i = 1; i <= 100; i++) arr[i] = false;
for(int i = 1; i <= 4; i++) t[i] = new Thread(p[i] = new People(i));
for(int i = 1; i <= 4; i++)
t[i].start();
while(get() < 100);
for(int i = 1; i <= 4; i++) t[i].stop();
}

public static Boolean[] arr = new Boolean[105];

public static volatile Integer cnt = 0;

public static boolean get(int k){
synchronized(arr[k]){
if(arr[k]) return false;
else return arr[k] = true;
}
}

public static void add(){
synchronized(cnt){
cnt++;
}
}

public static int get(){
synchronized(cnt){
return cnt;
}
}

}

class People implements Runnable{
public int id;
public People(int t){
id = t;
}
public void run(){
while(true){
while(true){
int temp = new java.util.Random(System.nanoTime()).nextInt(100) + 1;
if(Test.get(temp)){
System.out.println(id + "搬走了" + temp);
Test.add();
break;
}
}
try{ Thread.sleep(10); } catch(Exception e){ e.printStackTrace(); }
}
}
}

⑷ 什么是多线程编程

多线程编程技术是Java语言的重要特点。多线程编程的含义是将程序任务分成几个并行的子任务。特别是在网络编程中,你会发现很多功能是可以并发执行的。 比如网络传输速度较慢、用户输入速度较慢,你可以用两个独立的线程去完成这两个功能,而不影响正常的显示或其它功能。 多线程是与单线程比较而言的,普通的Windows采用单线程程序结构,其工作原理是:主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是针对一个函数,只有等这个函数执行完之后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据,或读一个文件,只有等读完这个数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。Java中的线程类 1.扩展java.lang.Thread类,用它覆盖Thread类的run方法。 2.生成实现java.lang.Runnable接口的类并将其它的实例与java.lang.Thread实例相关联。 Thread类是负责向其它类提供线程支持的最主要的类,要使用一个类具有线程功能,在Java中只要简单地从Thread类派生一个子类就可以了扩展Thread类,如printThread.java。 Thread类最重要的方法是run方法。run方法是新线程执行的方法,因此生成java.lang.Thread的子类时,必须有相应的run方法。 //PrintThread.java public class PrintThread extends Thread//继承Tread类 private int count=0 //定义一个count变量用于统计打印的次数并共享变量 public static void mainString args//main方法开始 PrintThread p=new PrintThread//创建一个线程实例 p.start//执行线程 for{;;}//主线程main方法执行一个循环,for执行一个死循环count++ System.out.printcount+″:Main\n″//主线程中打印count +“main”变量的值,并换行 public void run//线程类必须有的run()方法for{;;}count++ System.out.printcount+″:Thread\n″ 上面这段程序便是继承java.lang.Tread并覆盖run的方法。用Java 虚拟机启动程序时,这个程序会先生成一个线程并调用程序主类的main方法。这个程序中的main方法生成新线程,连接打印“Thread”。在启动线程之后,主线程继续打印“Main”。 编译并执行这个程序,然后立即按“Ctrl+C”键中断程序,你会看到上面所述的两个线程不断打印出:XXX:main…..XXX:Thread…. XXX代表的是数字,也就是上面count的值。在笔者的机器上,不同时刻这两个线程打印的次数不一样,先打印20个main(也就是先执行20次主线程)再打印出50次Thread,然后再打印main…… 提示:为了便于查看该程序的执行结果,你可以将执行结果导入一个文本文件,然后打开这个文件查看各线程执行的情况。如运行: javac PrintThread.java Java PrintThread1.txt 第一个命令javac PrintThread.java是编译java程序,第二个是执行该程序并将结果导入1.txt文件。当然你可以直接执行命令:java

热点内容
阅读脚本是什么 发布:2025-01-11 08:39:27 浏览:777
booljava 发布:2025-01-11 08:36:08 浏览:767
我的世界服务器必要弄的东西 发布:2025-01-11 08:32:56 浏览:424
postgre数据库 发布:2025-01-11 08:32:22 浏览:480
android登录源码 发布:2025-01-11 08:32:10 浏览:675
压缩机闭阀 发布:2025-01-11 08:27:19 浏览:671
dns服务器地址陕西 发布:2025-01-11 08:24:59 浏览:45
学思维编程 发布:2025-01-11 08:24:59 浏览:609
爱如生数据库 发布:2025-01-11 08:12:42 浏览:255
svm遗传算法 发布:2025-01-11 08:11:15 浏览:217