线程小结
学完了线程,对线程有些的理解,感觉java中线程就好比开关的作用一样,如果只是一个主函数,那么java会自动的给这个主函数添加一个线程,启动这个函数,让这个函数按照代码的顺序执行各个指令。比如有以下的代码:
public class Test {
public static void main(String [] agrs){
Test ts= new Test();
ts.A();
}
void A(){
B();
C();
System.out.println("我是A");
}
void B(){
System.out.println("我是B");
}
void C(){
System.out.println("我是C");
}
}
这里是按顺序执行的,A方法中的B和C方法不能同时执行,只能是按照代码的顺序执行,线程的作用就是可以让B和C方法可以同时执行。对于内存来说,它并不是将内存分为几部分分别执行B、C方法,而是以一个很短的时间为间隔,轮换的执行着这些方法,以致表面上是同时进行的。对于线程的具体例子,我借鉴别人的思想做了一个坦克小游戏。大家如果有兴趣,可以在网上找找。
Java中要实现多线程,大体上有两种方式:
1:继承Thread类
2:实现Runnable接口
对于第一种:
public class SayHello extends Thread{
public static void main(String[] args) {
SayHello sh0= new SayHello("A");
SayHello sh1= new SayHello("B");
sh0.start();
sh1.start();
}
private String name;
public SayHello(){
}
public SayHello(String name){
this.name=name;
}
public void run(){
for(int i=0;i<5;i++){
System.out.println(name+" "+"SayHello"+" "+i);
}
}
}
他的输出结果的一种情况为:
A SayHello 0
B SayHello 0
A SayHello 1
B SayHello 1
A SayHello 2
A SayHello 3
A SayHello 4
B SayHello 2
B SayHello 3
B SayHello 4
并没有按照先A后B的方式执行。
2:第二种方法是实现Runnable接口:
public class SayHello2 implements Runnable {
private String name;
public SayHello2(){
}
public SayHello2(String name) {
this.name=name;
}
public static void main(String[] args) {
SayHello2 sh0=new SayHello2("A");
Thread thread0=new Thread(sh0);
thread0.start();
SayHello2 sh1=new SayHello2("B");
Thread thread1=new Thread(sh1);
thread1.start();
}
public void run() {
for(int i=0;i<7;i++){
System.out.println(name+" "+"SayHello"+" "+i);
}
}
}
他的输出结果的一种情况为:
B SayHello 0
A SayHello 0
B SayHello 1
B SayHello 2
B SayHello 3
B SayHello 4
A SayHello 1
A SayHello 2
A SayHello 3
A SayHello 4
A SayHello 5
A SayHello 6
B SayHello 5
B SayHello 6
上面就是两种实现多线程的方法,只不过只是涉及到了线程的启动方法,线程还有休眠的方法sleep();休眠的方法可以实现小游戏中某个物体的移动。例如在坦克大战中让坦克移动的方法就是利用sleep()方法使得某个坦克的线程休眠一定的时间坦克后重绘在的下一个位置。在线程结束后,最好要有一个stop();方法结束这个线程,释放内存。