个人技术博客-java多线程实现
这个作业属于哪个课程 | 2021春软件工程实践|S班(福州大学) |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 | 个人技术总结 |
-
java多线程的基本使用
-
定义任务、创建和运行线程
-
定义任务
继承Thread类
实现Runnable接口 (可以说是 将任务和线程分开了)
实现Callable接口
任务逻辑写在Thread类的run方法中,有单继承的局限性,创建多线程时,每个任务有成员变量时不共享,必须加static才能做到共享,Runnable和Callable解决了Thread的局限性。
class T extends Thread {
@Override
public void run() {
log.info("我是继承Thread的任务");
}
}
class R implements Runnable {
@Override
public void run() {
log.info("我是实现Runnable的任务");
}
}
class C implements Callable<String> {
@Override
public String call() throws Exception {
log.info("我是实现Callable的任务");
return "success";
}
}
-
创建线程
创建线程的方法:通过Thread类直接创建线程;利用线程池内部创建线程。 -
运行线程
Thread t = new Thread(){
@Override
public void run() {
log.info("我是Thread匿名内部类的任务");
}
};
new Thread(new R()).start();
new Thread(new Runnable() {
@Override
public void run() {
log.info("我是Runnable匿名内部类的任务");
}
}).start();
new Thread(() -> log.info("我是Runnable的lambda简化后的任务")).start();
FutureTask<String> target = new FutureTask<>(new C());
new Thread(target).start();
log.info(target.get());
-
线程的优先级
yield()方法会让运行中的线程切换到就绪状态,重新争抢cpu的时间片,争抢时是否获取到时间片看cpu的分配。程的优先级
线程内部用1~10的数来调整线程的优先级,默认的线程优先级为5
cpu比较忙时,优先级高的线程获取更多的时间片;
cpu比较闲时,优先级设置基本没用/.
public static native void yield();
Runnable r1 = () -> {
int count = 0;
for (;;){
log.info("---- 1>" + count++);
}
};
Runnable r2 = () -> {
int count = 0;
for (;;){
Thread.yield();
log.info(" ---- 2>" + count++);
}
};
Thread t1 = new Thread(r1,"t1");
Thread t2 = new Thread(r2,"t2");
t1.start();
t2.start();
参考
作者:胖胖胖胖虎阿