java多线程….笔记
创建多线程:
方式一:继承Thread类
A:自定义MyThread类继承Thread
B:MyThread类里面重写run()
C:创建对象
D:启动线程
```
```java
//MyThread.java
public class MyThread extends Thread {
@Override
public void run() {
long start=System.currentTimeMillis();
for(int i=0;i<1000;i++){
System.out.println(i);
}
long end=System.currentTimeMillis();
System.out.println("--------------------");
System.out.println(end-start+"毫秒");
}
}
//MyThreadDemo.java
public class MyThreadDemo{
public static void main(String[] args) {
MyThread my1=new MyThread();
MyThread my2=new MyThread();
my1.start();
my2.start();
}
}
String getName()//返回该线程的名称。 void setName(String name)//设置线程名称,使之与参数 name 相同。
static Thread currentThread()//返回对当前正在执行的线程对象的引用。
两种调度模型:分时调度,抢占式调度 java使用的抢占式调度模型,与优先级有关。
int getPriority()//返回线程的优先级,默认为5 int setPriority()//设置线程的优先级 优先级默认范围:1-10,次数较多时才比较有效果,因为存在随机性
static void sleep(long millis)//在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 void join()//等待该线程终止 static void yield()//暂停当前正在执行的线程对象,并执行其他线程。 void setDaemon(boolean on)//将该线程标记为守护线程或用户线程。 void stop()//已过时,但是还可以用 public void interrupt()中断线程,把线程状态终止,并抛出一个异常,然后执行完后续代码
创建多线程:
方式二:实现Runnable接口
A:自定义MyRunnable实现Runnable接口
B:重写run()
C:创建对象
D:创建Thread类的对象,并把C步骤的对象作为构造参数传递
```
```java
MyRunnable.java
public class MyRunnable implements Runnable {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
System.out.println(Thread.currentThread().getName() + " : " + x);
}
}
}
MyRunnableDemo.java
public class MyRunnableDemo {
public static void main(String[] args) {
MyRunnable my=new MyRunnable();
Thread t1=new Thread(my,"yifei");
Thread t2=new Thread(my,"tws");
// t1.setName("yifei");
// t2.setName("tws");
t1.start();
t2.start();
}
}
方式一:继承Thread类
A:自定义MyThread继承Thread类
B:在MyThread类中重写run()
C:创建MyThread类的对象
D:启动线程对象
问题:
a:为什么重写run()方法
run()里面封装的是被线程执行的代码
b:启动线程对象调用哪个方法?
start()
c:run()和start()的区别
run()直接调用,是调用普通方法的效果
start()先启动线程,再有JVM调用run()方法
方式二:实现Runnable接口
A:自定义MyRunnable实现Runnable接口
B:重写run()
C:创建对象
D:创建Thread类的对象,并把C步骤的对象作为构造参数传递
问题:
有了方式一,为什么还要方式二呢?
1.可以避免由于Java单继承带来的局限性。
2.适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/ 微博:寒枫–0-0– 知乎:https://www.zhihu.com/people/tao-wu-sheng 豆瓣:YIFEI