MyThread.java
import java.util.*;
public class MyThread extends Thread {
int pauseTime;
public MyThread(int hTime,String name){
super(name);
pauseTime=hTime;
}
public void run(){ //覆盖Thread类中的run方法
for (int i=1;i<5;i++){
try{
System.out.println(this.getName()+":"+new Date(System.currentTimeMillis()));
Thread.sleep(pauseTime);
} catch (Exception e) {
System.out.println("线程错误"+e);
}
}
}
public static void main(String[] args) {
System.out.println("1,当前活动线程数量为"+Thread.activeCount());
MyThread myThread1=new MyThread(2000,"线程A");
myThread1.start();
System.out.println("2,当前活动线程数量为"+Thread.activeCount());
MyThread myThread2=new MyThread(2000,"线程B");
myThread1.start();
System.out.println("3,当前活动线程数量为"+Thread.activeCount());
System.out.println("线程myThread1的名字为"+myThread1.getName());
System.out.println("线程myThread2的名字为"+myThread2.getName());
myThread1.setName("线程1");
System.out.println("线程myThread1的名字改为:"+myThread1.getName());
}
}
要重写Thread类中的run方法。
MyRunThread.java
import java.util.Date;
class MyRunThread implements Runnable{
int pauseTime;
String name;
public MyRunThread(int hTime,String name){
pauseTime=hTime;
this.name=name;
}
public void run(){
for (int i=0;i<5;i++){
try {
System.out.println(name+":"+new Date(System.currentTimeMillis()));
Thread.sleep(pauseTime);
}catch (Exception e){
System.out.println("线程错误"+e);
}
}
}
public static void main(String[] args) {
System.out.println("1,当前活动线程数量为"+Thread.activeCount());
MyRunThread m1=new MyRunThread(2000,"线程A");
Thread myThread1=new Thread(m1,"线程A");
myThread1.start();
System.out.println("2,当前活动线程数量为"+Thread.activeCount());
MyRunThread m2=new MyRunThread(2000,"线程B");
Thread myThread2=new Thread(m2,"线程B");
myThread2.start();
System.out.println("3,当前活动线程数量为"+Thread.activeCount());
System.out.println("线程myThread1的名字为"+myThread1.getName());
System.out.println("线程myThread2的名字为"+myThread2.getName());
myThread1.setName("线程1");
m1.name=myThread1.getName();
System.out.println("线程myThread1的名字改为:"+myThread1.getName());
}
}
需要实现Runnable接口中的run方法。
同步方法:
在方法定义时,在方法名前添加synchronized关键字。
public class MediRegister implements Runnable{
int number=1;
private int maxnum=40;
public void setMaxnum(int max){
maxnum=max;
}
public int getMaxnum(){
return maxnum;
}
@Override
public synchronized void run() {//线程同步
try {
if (number<=maxnum){
System.out.println(Thread.currentThread().getName()+"您挂号成功,号码是第"+number+"位");
Thread.sleep((int)(Math.random()*1000));
number++;
}else {
System.out.println(Thread.currentThread().getName()+",今天挂号已满,不能挂号");
}
} catch (InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
}
public static void main(String[] args) {
MediRegister theReg=new MediRegister();
theReg.setMaxnum(2);
Thread myRegister1=new Thread(theReg,"Mary");
Thread myRegister2=new Thread(theReg,"Lily");
Thread myRegister3=new Thread(theReg,"Tom");
myRegister1.start();
myRegister2.start();
myRegister3.start();
}
}