157
技術社區[雲棲]
馬士兵J2SE-第九章-多線程機製-舉例、線程同步之鎖
package com.zzk.test;
//同樣一個線程類可以起兩個線程
public class Test {
public static void main(String[] args) {
Runner r=new Runner();
Thread t1=new Thread(r);
Thread t2=new Thread(r);
t1.start();
t2.start();
}
}
class Runner implements Runnable {
public void run() {
for(int i=0;i<30;i++) {
System.out.println("No. "+i);
}
}
}
package com.zzk.test;
//sleep方法
public class Test {
public static void main(String[] args) {
Runner r=new Runner();
Thread t=new Thread(r);
t.start();
}
}
class Runner implements Runnable {
public void run() {
for(int i=0;i<30;i++) {
if(i%10==0 && i!=0) {
try {
Thread.sleep(2000);
}catch(InterruptedException e) {}
}
System.out.println("No. "+i);
}
}
}
package com.zzk.test;
//正確停止一個線程
public class Test {
public static void main(String[] args) {
Runner r=new Runner();
Thread t=new Thread(r);
t.start();
for(int i=0;i<100000;i++) {
if(i%10000==0&i>0)
System.out.println("in thread main i="+i);
}
System.out.println("Thread main is over");
r.shutDown();
}
}
class Runner implements Runnable {
private boolean flag=true;
public void run() {
int i=0;
while (flag==true) {
System.out.print(" "+i++);
}
}
public void shutDown() {
flag=false;
}
}
package com.zzk.test;
public class Test {
public static void main(String[] args) {
Runner r=new Runner();
Thread t=new Thread(r);
t.start();
try {
t.join();
}catch(InterruptedException e) {
}
for(int i=0;i<50;i++) {
System.out.println("主線程:"+i);
}
}
}
class Runner implements Runnable {
public void run() {
for(int i=0;i<50;i++) {
System.out.println("SubThread: "+i);
}
}
}
package com.zzk.test;
public class Test {
public static void main(String[] args) {
Thread t=new Runner();
t.start();
for(int i=0;i<50;i++) {
System.out.println("MainThread: "+i);
}
}
}
class Runner extends Thread {
public void run() {
System.out.println(Thread.currentThread().isAlive());
for(int i=0;i<50;i++) {
System.out.println("SubThread: "+i);
}
}
}
package com.zzk.test;
public class Test implements Runnable {
Timer timer=new Timer();
public static void main(String[] args) {
Test test=new Test();
Thread t1=new Thread(test);
Thread t2=new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run() {
timer.add(Thread.currentThread().getName());
}
}
//class Timer {
// private static int num=0;
//
// public void add(String name) {
// synchronized(this) {//鎖定某一個東西
// num++;
// try {Thread.sleep(1);}
// catch(InterruptedException e) {}
// System.out.println(name+",你是第"+num+"個使用timer的線程");
// }
// }
//}
class Timer {
private static int num=0;
public synchronized void add(String name) {//鎖定當前對象
num++;
try {Thread.sleep(1);}
catch(InterruptedException e) {}
System.out.println(name+",你是第"+num+"個使用timer的線程");
}
}
輸出:
t1,你是第1個使用timer的線程
t2,你是第2個使用timer的線程
最後更新:2017-04-02 06:52:08