java线程
最近看了一下java的线程,今天就自己来整理一波,我们知道一个人做事比多个人同时做事要慢,对于线程我们就可以理解为,多个人去做事一样。一个人分开做自己的那一部分互相不影响,肯定是要比一个线程去做所有的事情要高效。但是我们自己要明白的是,虽然在理解上线程是同步进行的,但是实际上他们不是同步进行的,只是cpu不同的在进行上下文的切换,切换的很快,让我们感觉到了好像是在同步进行一样,但其实还是单步执行的。
java线程主要是Thread类和Runnable和Callable接口,这里主要还是讲一下前面两个后面的Callable用的还是较少(我现在的经历来看)
1.Thread
我为了减少文字我还是直接上代码吧
package com.text1;
public class Test05 {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println("这是一个主线程");
}
new MyThread().start();//在这里创建这个类,并使用start这个方法,这个方法就是将这个线程执行
//运行的结果可以看到他们是交替进行的,就是会打印“这是一个主线程”然后等一下又打印“这是一个子线程”,大家可以体会一下,强烈建议大家自己敲代码
}
}
class MyThread extends Thread{//继承Thread这个类,重写run方法,这个方法就是线程运行的时候使用的你可以理解为main方法,这个就是会第一个执行的方法
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("这是一个子线程");
}
}
}
当然如果大家是知道匿名类的话就可以进行简化,当然我不建议这样因为这样的话会把代码搞的很乱
package com.text1;
public class Test05 {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println("这是一个主线程");
}
new Thread() {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("这是一个子线程");
}
}
}.start();//在这里创建这个类,并使用start这个方法,这个方法就是将这个线程执行
//运行的结果可以看到他们是交替进行的,就是会打印“这是一个主线程”然后等一下又打印“这是一个子线程”,大家可以体会一下,强烈建议大家自己敲代码
}
}
//class MyThread extends Thread{//继承Thread这个类,重写run方法,这个方法就是线程运行的时候使用的你可以理解为main方法,这个就是会第一个执行的方法
// @Override
// public void run() {
// for (int i = 0; i < 100; i++) {
// System.out.println("这是一个子线程");
//
// }
// }
//}
这里的结果和上面是一样的,如果大家不太会的话也别太纠结了,重点是上面的那个。
2.Runnable
这是一个接口,我还是给大家做一个代码演示
package com.text1;
public class Test06 {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();// 在这里实例化
Thread thread = new Thread(myRunnable,"小黑的子线程");/*
* 这里有一些不同,我们要实例化Thread这个类,并把myRunnable放到构造方法中,如果有同学感觉有点怪的话可以看一下
* 源码,其实我们发现Thread也是继承了Runnable这个接口的,并且里面有很多的构造方法
*/
thread.start();
Thread thread1 = new Thread(myRunnable,"小白的子线程");
thread1.start();
}
}
class MyRunnable implements Runnable {// 继承Runnable接口,并且重写run方法,和Thread是一样的
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(Thread.currentThread().getName());//打印里的方法就是获取线程的名字的
}
}
}
3.总结
对比他们两个我们其实发现了一些优缺点,Thread他是一个类,java里是单继承的所以有个时候是不太方便了,而Runnable是一个接口,明显使用频率将会更高。当然还有一个Callable这个接口因为篇幅太长了,我也不太想讲了(其实我还没有太过用到哈哈哈哈哈哈)
好了到这里就差不多结束了,大家还是得手动敲一敲代码,我这里给大家列举的还是非常入门级别的所以大家还要提升的话最好找一些学习视频多去学习。