馬兵士J 2 SE-第九章-マルチスレッドメカニズム-例、スレッド同期のロック
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 ");
}
}
出力:
t 1、あなたは1番目にtimerを使用するスレッドt 2で、あなたは2番目にtimerを使用するスレッドです