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的初学者。
答案 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项目相比)。
答案 1 :(得分:1)
也许你误解了Thread实际上做了什么。将循环放在Runnable中并不会自动为它们并行化。它只是按顺序运行代码,但是在一个单独的线程中。我猜你真正想要的是以下内容:
$ bash ../test.sh
test
foo
123
456
test