我看挺多学Java的小伙伴们都有这上面的作业,今天先来更新几期头歌的作业吧,笔记我尽量写,加油。
文章目录
简述
如果一个程序只有一个执行流程,所以这样的程序就是单线程程序。假如一个程序有多条执行流程,那么,该程序就是多线程程序。
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建多线程
1.任务描述![](https://img-blog.csdnimg.cn/direct/d7a997a800e94b458194139a11b3ab00.png)
2.解题:
package step1;
public class CreateThreadPractice {
public static void main(String[] args) {
MyThread myThread = new MyThread();
// ---------------------Begin------------------------
//开启线程
myThread.start();
// ---------------------End------------------------
}
}
// ---------------------Begin------------------------
//继承Thread编写名为MyThead的类,代码内容为循环输出10遍: 线程在运行......
class MyThread extends Thread{
public void run(){
for(int i = 0;i<10;i++){
System.out.println("线程在运行......");
}
}
}
// ---------------------End------------------------
二、使用Callable接口创建多线程
1.任务描述
2.解题:
package step2;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
// ---------------------Begin------------------------
//tips: 输出语句为:Thread.currentThread().getName()+"的call()方法在运行"
//定义一个实现Callable接口的实现类,类名必须命名为MyThread_callable
class MyThread_callable implements Callable{
public Object call() throws Exception{
for(int i = 0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"的call()方法在运行");
}
return Thread.currentThread().getName();
}
}
// ---------------------End------------------------
public class CallableExample {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
// 创建Callable接口的实现类对象
MyThread_callable myThread3 = new MyThread_callable();
// 使用FutureTask封装Callable接口
FutureTask<Object> ft1 = new FutureTask<>(myThread3);
// 使用Thread(Runnable target ,String name)构造方法创建线程对象
Thread thread1 = new Thread(ft1, "thread1");
// 创建并启动另一个线程thread2
FutureTask<Object> ft2 = new FutureTask<>(myThread3);
Thread thread2 = new Thread(ft2, "thread2");
// ---------------------Begin------------------------
// 调用线程对象的start()方法启动线程
//thread1.setPriority(10);
thread1.start();
Thread.sleep(100);
//thread2.setPriority(1);
thread2.start();
Thread.sleep(100);
// 可以通过FutureTask对象的方法管理返回值
try{
System.out.println("thread1返回结果:"+ft1.get());
System.out.println("thread2返回结果:"+ft2.get());
}catch(Exception e){
e.printStackTrace();
}
// ---------------------End------------------------
}
}
三、使用Runnable接口创建多线程
1.任务描述
2.解题:
package step3;
// ---------------------Begin------------------------
//定义一个实现Runnable接口的实现类,类名必须命名为MyThread_runable
//tips: 输出语句为:Thread.currentThread().getName()+"的run()方法在运行"
class MyThread_runable implements Runnable{
public void run(){
for(int i = 0;i<3;i++){
System.out.println(Thread.currentThread().getName()+"的run()方法在运行");
}
}
}
// ---------------------End------------------------
四、多线程中的售票问题
1.任务描述
(这一题整的人很麻木,没有说明输出是什么,刚开始时我是按照着前面同步锁的示例来写的,但我运行成功了,但是不匹配,太草率了,这题目出的,有兴趣的可以看一下下面的标准答案。嘿嘿)
2.解题:
package step4;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SellTicket extends Thread {
//多线程共享资源,票数为30张
public static int ticketnums = 30;
// ---------------------Begin------------------------
private static ReentrantLock lock = new ReentrantLock();
//@Override
public void run(){
while(true){
try{
lock.lock();
if(ticketnums>0){
try{
Thread.sleep(10);
}catch(InterruptedException e) {
e.printStackTrace();}
System.out.println("卖出了第"+ticketnums+"张票");
ticketnums--;
}else{
System.out.println("票卖完了");
System.exit(0);
}
}finally{
lock.unlock();
}
}
}
// ---------------------End------------------------
}
五、知识回顾
1.题目一
2.题目二
3.题目三
总结
昨天的作业是这个,那我就先更新这个慢慢往前更新,Java学习笔记,我正在努力的敢,加油努力吧,大家。