对于多线程的理解,我从已开始听的很模糊。
线程就是一个进程里多个线程执行同一个数据的不同路径,简单来说,就是多个人在一个桌上吃同一个碗里的同一种菜,不知道这样大家能看明白不,我在理解这里的代码时,有许多困难,因为毕竟没有现实场景的辅助很难理解这些概念型性的知识,
好的,废话不多说,咋直接上代码吧!
首先先给各位上一个线程的 继承类,就继承Thread吧
/*首先咋先自定义类Mythread去继承thread类
继承之后我们让Mythread类重写thread类里的run()方法
那为什么要重写run方法呢
原因如下:
1.区分能够被线程执行的代码
2.run()方法就是被用来执行线程启动的代码
*/
package YieldsDemo;
public class MythreadTest extends Thread {
@Override
public void run() {
for (int i = 1; i < 10; i++) {
//getName()获取线程默认名称
System.out.println(getName+"------"+i);
}
}
public static void main(String[] args) {
//创建线程对象
MythreadTest mt1 = new MythreadTest();
MythreadTest mt2 = new MythreadTest();
MythreadTest mt3 = new MythreadTest();
//设置线程名称
mt1.setName("张三");
mt2.setName("李四");
mt3.setName("王五");
//启动线程
mt1.start();
mt2.start();
mt3.start();
}
}
再来一个Runnable吧
首先说明一点哦,Runnable是一个接口,需要实现这个类并且重写run()方法
好了,现在开始吧
public class MyRunnable implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0;i<300;i++){
System.out.println(i);
}
}
}
public class MyRunnableTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建MyRunnable对象
//这里其实就是将任务封装成对象
MyRunnable mr = new MyRunnable();
//创建Thread类的对象,将mr作为构造参数
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
//启动线程
t1.start();
t2.start();
}
}
还有一个Callable接口,这个接口需要实现Callable接口并且重写call方法
import java.util.concurrent.Callable;
public class MyCallable implements Callable {
@Override
public Object call() throws Exception {//相当于run方法,封装现成代码的
// TODO Auto-generated method stub
for(int i = 0;i<300;i++){
System.out.println(i);
}
return null;
}
}
import java.util.concurrent.FutureTask;
public class MyCallableTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建实现类MyCallable对象
MyCallable mc = new MyCallable();
//创建FutureTask对象
FutureTask ft1 = new FutureTask<>(mc);
FutureTask ft2 = new FutureTask<>(mc);
//创建Thread类对象
Thread t1 = new Thread(ft1);
Thread t2 = new Thread(ft2);
//启动线程
t1.start();
t2.start();
}
}
好的今天咋就讲完了哦