Java Thread循环顺序运行

时间:2018-01-27 14:05:35

标签: java

public class Meh {

    public static void main(String[] args) {

        Thread th2=new Thread() { 
            public void run(){
                for (int i=0;i<=10;i++) {
                    System.out.println("No 2 "+i);
                }
            }
        };

        Thread th1=new Thread() { 
            public void run(){
                for (int i=0;i<=10;i++) {
                    System.out.println("No 1 "+i);
                }
            }
        };

        for (int i=0;i<=10;i++) {
            System.out.println("main "+i);
        }
        th1.start();
        th2.start();
    }
}

为什么我的循环按顺序运行?三个循环互换但在循环内它们按顺序运行。我无法弄明白为什么?我是java的初学者。

2 个答案:

答案 0 :(得分:2)

为什么您的代码按顺序运行

您的代码有3个部分,我的颜色编码如下:

红色

import cv2
image_orig=cv2.imread('C:\Users\pc\Desktop\middleeast.jpg')
image_gray=cv2.cvtColor(image_orig,cv2.COLOR_BGR2GRAY)
_, image_threshold=cv2.threshold(image_gray,60,255,cv2.THRESH_BINARY)
_,contours,_=cv2.findContours(image_threshold,cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)
image_contours=image_orig.copy()
cv2.drawContours(image_contours,contours,-1,(255,255,0),1)
cv2.imshow('image_contours',image_contours)
cv2.imwrite('C:\Users\pc\Desktop\middleEastAllContours.jpg', image_contours)
for counter,contour in enumerate(contours):
    if cv2.contourArea(contour)<250.0:
        contours.pop(counter)
image_big_contours=image_orig.copy()
cv2.drawContours(image_big_contours,contours,-1,(255,255,0),1)
cv2.imshow('big contours',image_big_contours)
cv2.waitKey(0)

...

 Thread th1 = new Thread() {
     public void run() {
         for (int i = 0; i <= 10; i++) {
             System.out.println("No 1 " + i);
         }
     }
 };

绿色

for (int i=0;i<=10;i++) {
    System.out.println("main "+i);
}
th1.start();
th2.start();

Thread th1 = new Thread() {
    public void run() {
        for (int i = 0; i <= 10; i++) {
            System.out.println("No 1 " + i);
        }
    }
};

正如你所看到的,绿色和蓝色将混合在一起,但它们不会用完自己的顺序(No 1 6将永远不会发生在No 15之前,但可能在任何地方与No 2项目相比)。

enter image description here

答案 1 :(得分:1)

也许你误解了Thread实际上做了什么。将循环放在Runnable中并不会自动为它们并行化。它只是按顺序运行代码,但是在一个单独的线程中。我猜你真正想要的是以下内容:

$ bash ../test.sh
test
        foo
                123
                456
        test