是一个关于多线程的,还不涉及到多线程通信,只是通过继承Thread类,重写run函数,获得做自己事情的多线程类thrd。
public class thrd extends Thread
{
int m_threadNum;/ number of thread
public thrd(int num)
{
// TODO Auto-generated constructor stub
m_threadNum = num;
}
public void run()
{
for(int ii = 0; ii < 80; ii++)
{
System.out.println("Thread number: " + Integer.toString(m_threadNum) + " - round: " + Integer.toString(ii));
}
}
}
在下面的主程序(小程序,applet)中可以看到,在开启多线程之前,设置了各个线程的优先级。并且晚启动优先级较高的线程。当循环次数足够多的时候能够制造出优先级较高的线程即使开启晚也能够抢占CPU的资源,率先完成任务。
import java.applet.*;
import java.awt.*;
public class mainFunc extends Applet
{
thrd m_td1;
thrd m_td2;
thrd m_td3;
TextArea m_ta;
GridLayout m_gl;
Label lb1;
Label lb2;
Label lb3;
public void init()
{
thrd m_td1 = new thrd(1);
thrd m_td2 = new thrd(2);
thrd m_td3 = new thrd(3);
m_ta = new TextArea("",20,20);
m_gl = new GridLayout(2, 2);
setLayout(m_gl);
lb1 = new Label();
add(lb1);
lb2 = new Label();
add(lb2);
lb3 = new Label();
add(lb3);
m_td2.setPriority(Thread.MAX_PRIORITY);
m_td2.setPriority(Thread.MIN_PRIORITY);
m_td1.start();
lb1.setText("Thread1 with max_priority started");
m_td2.start();
lb2.setText("Thread2 with min_priority started");
m_td3.start();
lb3.setText("Thread3 with NORMAL_priority started");
}
}
控制台中打印的结果如下图所示:
在上面的线程类的程序中可以看到一个问题,就是如果要创建自己的线程,需要继承Thread类,而且Java中不允许多重继承(同时继承多个父类),导致thrd类不能继承其他的类。
上面问题的一个解决办法是使用Java中的接口,让类既可以继承其他的父类,在继承之后使用接口runnable(interface runnable),可以实现既能够继承,又具有多线程的能力。
最近博客有点耽搁,有两个方面的原因:
1、《数据结构与算法应用》看到了树那一块儿,又进入到“较难,不想学”的阶段,但是在结合一些数据结构的资料在克服;
2、工作中需要使用Java,在从头开始学习Java的内容,还没有入门,不敢轻易的写东西,也的确还没有积累到东西。
后期正确提高效率,多学多记。