java线程问题,为什么我的程序得不到想要的结果(线程1先运行结束,才到线程2运行,可结果不是这样)
发布网友
发布时间:2022-04-21 10:29
我来回答
共4个回答
热心网友
时间:2022-04-21 11:59
优先级不准?你理解什么叫线程优先级吗?
线程你只要不告诉它等待,它是不会等其他线程先结束的。什么是线程,线程天生就是并行运行分支,哪怕你给它最低的优先级,那它也只是在同一时刻相比其他线程被执行的几率较低,而完全没有道理停下来等待。
如果你要让它等待,有很多办法,例如,最简单:
public class Test extends Thread {
private static Object lock = new Object();
public static void main(String[] args) {
try {
Test p1 = new Test();
Test p2 = new Test();
p1.setName("线程1");
p2.setName("线程2");
p1.setPriority(MAX_PRIORITY);
p2.setPriority(MIN_PRIORITY);
p1.start();
while (p1.getState() != Thread.State.TERMINATED);
p2.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
for (int i = 0; i <= 5; i++) {
System.out.println(getName() + " ");
}
}
}
热心网友
时间:2022-04-21 13:17
public class PriorityTest extends Thread {
public static void main(String[] args) {
try {
PriorityTest p1 = new PriorityTest();
PriorityTest p2 = new PriorityTest();
p1.setName("线程1");
p2.setName("线程2");
p1.setPriority(MAX_PRIORITY);
p2.setPriority(MIN_PRIORITY);
p2.start();
p1.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
for (int i = 0; i <= 5; i++) {
System.out.println(getName() + " ");
}
}
}
是不是少了Test了..我这样运行起来正确的啊..是都先1再2的
热心网友
时间:2022-04-21 14:51
把Priority 发出来看下..
热心网友
时间:2022-04-21 16:43
看来还是没学到家,多看点书或者视频吧。
关于java多线程的疑问,为何单步没问题的程序去除断点后运行就会有问题...
用测试类跑的吧?测试类的主线程结束之后,容器就直接关掉了,你开的那些线程已经没有运行环境了,所以你让主线程等下在结束,容器保持开启状态,其他线程才能执行完;这个问题在程序正常启动的时候是不存在的。
为什么我的java多线程程序是执行完一个再到另外一个的???而不是同时...
Runer1 Thread: 37 Runer1 Thread: 38 Runer1 Thread: 39 Runer1 Thread: 40 Runer1 Thread: 41 Runer1 Thread: 42 Runer1 Thread: 43 Runer1 Thread: 44 Runer1 Thread: 45 main Thread ---1 main Thread ---2 main Thread ---3 main Thread ---4 main Thread ---5 main ...
java中,一个运行的线程什么状态是它的结束
线程有四种状态,任何一个线程肯定处于这四种状态中的一种:1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。2) 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程...
JAVA 的线程这块咋整啊,咋也学不明白啊~~
只有在多CPU 的计算机或者在网络计算体系结构下,将Java程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。另外,如果应用程序必须等待网络连接或数据库连接等数据吞吐速度相对较慢的资源时,多线程应用程序是非常有利的。基于Internet的应用...
JAVA线程的题目 求大神解答
1、线程的实现方式有两种一种是继承Thread一种是实现Runable。2、优先级设置和获取的示例如下:3、执行结果 线程根据优先级执行并不根据调用代码的先后。
java运行后,进程不结束,怎么办?
此种情况下是因为有线程尚未结束。一般有下面几种情况:使用了定时器:java.util.Timer。定时器在运行时,程序是无法结束的,需要cancel才可以。使用图形界面。比如new JFrame()并显示后,需要通过setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)设置JFrame的关闭行为为销毁,这样才能保证界面线程被清掉...
java.多线程情况下,我的main方法运行结束了,到run方法的代码还没执行...
main本质上也是属于一个线程,当所有线程都执行完成了JVM才会退出,所以针对你的问题,答案是: 如果main方法运行结束了,但是run没有执行结束,那么main会终止,但是run不会终止。
如何正确结束Java线程
1. 使用退出标志终止线程 当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务。在这种情况下,一般是将这些任务放在一个循环中,如while循环。如果想让循环永远运行下去,可以使用while(true){……}来处理。...
java 线程,while()括号中的判断为false为什么还会执行while循环体呢...
这个问题要看几率 买彩票中500W的几率能达到你想要的效果,呵呵 问题主要是这样的:这个和你调用sleep基本上没多大关系 main线程里面一开始就启动了子线程,这时候2个线程同时运行,去抢占CPU时间片 大多数时候,子线程一直执行,不停的打印,当子线程执行到下面这条语句:System.out.println("---" + ...
Java中的线程同步与异步如何理解?
另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程...