3.31作业

1、 使用synchronized 、wait() 、notifyAll()方法实现 生产者消费者模型

public class Demo04 {
    private static  int count =0;
    private static final int FULL=10;
    private static final String LOCK = "lock";
    class producer implements Runnable{
        private String name;

        public producer(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public void run() {
            while (true){
                synchronized (LOCK){
                    if(FULL==10){
                        try {
                            LOCK.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    count++;
                    System.out.println(this.getName()+"生产,目前共有商品的个数:"+count);
                    LOCK.notifyAll();
                }

            }

        }
    }
    class customer implements Runnable{
        private String name;

        public customer(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public void run() {
            while (true){
                synchronized (LOCK){
                    if(FULL==0){
                        try {
                            LOCK.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    count--;
                    LOCK.notifyAll();
                    System.out.println(this.getName()+"消费,目前共有商品的个数:"+count);
                }
            }
        }
    }
    public static void main(String[] args) {
        Demo04 demo04 = new Demo04();
        customer c1 = demo04.new customer("消费者");
        producer p1 = demo04.new producer("生产者");
        Thread t1 = new Thread(c1);
        Thread t2 = new Thread(p1);
        t1.start();
        t2.start();

    }
}

2、 使用3种不同的方式创建线程

//继承Thread类创建线程
public class Demo01 {
    public static void main(String[] args) {

        myThread m1 = new myThread();
        myThread m2 = new myThread();
        m1.start();
        m2.start();
    }
}
class myThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.getName()+":"+i);
        }
    }
}
//实现Runable类创建线程
public class Demo02 {
    public static void main(String[] args) {
        myThread2 m1 = new myThread2("张三");
        myThread2 m2 = new myThread2("李四");
        Thread t1 = new Thread(m1);
        Thread t2 = new Thread(m2);
        t1.start();
        t2.start();
    }
}
class myThread2 implements Runnable{
    private String name;

    public myThread2(String name) {
        this.name = name;
    }

    public myThread2() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.getName()+":"+i);
        }
    }
}
//实现Callable类创建线程
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Demo03 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        myThread3 m1 = new myThread3("张三");
        myThread3 m2 = new myThread3("李四");
        FutureTask<Integer> task1 = new FutureTask<>(m1);
        FutureTask<Integer> task2 = new FutureTask<>(m2);
        Thread t1 = new Thread(task1);
        Thread t2 = new Thread(task2);
        t1.start();
        t2.start();
        task1.get();
        task2.get();
    }
}
class myThread3 implements Callable<Integer>{
    private String name;

    public myThread3(String name) {
        this.name = name;
    }

    public myThread3() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Integer call() throws Exception {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.getName()+":"+i);
        }
        return 1;
    }

3、 测试3种不同线程池,体会下区别


4、 默写出线程的线程的生命周期,以及不同状态做什么事情?

1.新建状态:使用new关键字进入的状态-不执行
2.就绪状态:经过start方法进入的状态,等待系统调度然后进入运行状态 -不执行
3.堵塞状态:当线程的执行过程中发生阻塞才进入的状态,如sleep方法
    阻塞状态解除后进入就绪状态
4.运行状态:经过线程调度器调用后进入的状态 -执行
    当线程的时间片执行完毕后没有完成任务,则回到就绪状态
    当在线程的时间片时间以内完成任务,则进入消亡状态
5.消亡状态:当线程的任务执行完毕后进入的状态,此时线程已经终止    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤安装libsvm 3.31: 1. 首先,您可以从libsvm***libsvm的扩展包。您可以选择适合您的操作系统的版本,并下载zip文件。 2. 下载完成后,解压缩zip文件。您可以将解压缩后的文件夹放在您选择的位置。 3. 在解压缩后的文件夹中,您可以找到libsvm的主要文件和文件夹。其中包括libsvm.jar和wlsvm.jar等必需的文件。您可以将这些文件复制到您的项目或工程目录中,以便在使用libsvm时可以引用它们。 4. 此外,您还可以在解压缩后的文件夹中找到一些预编译的二进制文件,例如libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64和svmpredict.mexw64等。这些文件可以用于MATLAB等编程语言的集成。如果您打算在MATLAB中使用libsvm,您可以将这些文件复制到MATLAB的工作目录中,以便在MATLAB中调用它们。 5. 安装完成后,您可以根据libsvm的使用说明进行配置和调用。您可以在libsvm的官方主页上找到详细的使用文档和示例代码,以帮助您开始使用libsvm进行机器学习和数据分类任务。 请注意,以上是一般的安装步骤,具体的安装步骤可能会因操作系统和使用环境的不同而有所差异。建议您在安装之前参考libsvm的官方文档和使用说明,以确保正确安装和使用libsvm。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [weka 集成LibSVMm所需的jar(wlsvm.zip),另附libsvm.zip和liblinear.zip](https://download.csdn.net/download/qq_42988711/87906163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SVM之Libsvm工具包的安装教程](https://blog.csdn.net/qq_43493562/article/details/110918276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [[Matlab]在Matlab中安装与使用LibSVM工具箱(小白指南)](https://blog.csdn.net/zytjasper/article/details/103168354)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值