ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IDEA的使用与多线程

2019-07-29 15:37:00  阅读:229  来源: 互联网

标签:main Thread IDEA Callable 线程 使用 new 多线程 public


十一:IDEA的使用与多线程

ctrl+shift+t:查找类
ctrl+o:查找类中的方法
Alt+enter:可以修改错误

  • 11.1
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    bin/idea64.exe.vmoptions下修改
    在这里插入图片描述
    IEDA工程:
    输出是:sout+enter键或者(“HelloWorld ”).sout+enter键;main()方法是psvm;(可在“File“”setting”“live Tenplates”中更改)
    在这里插入图片描述
    Eclipse工程:
    输出是:syso+alt+/;main()方法是main()+alt+/;
    在这里插入图片描述

  • 11.2:Module(创建模块)
    IDEA:Project和Module
    Eclipse:Workspace和Project
    创建:在“Project”下“new”“Module”
    删除:“Remove Module”使其成为普通的文件,再右击“Delete”

  • 11.3多线程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 如何创建多线程:
    1:继承于Thread类
    在这里插入图片描述

package Test01;

public class ThreadTest2 {
    public static void main(String[] args) {
    MyThread2 p2=new MyThread2();
    MyThread3 p3=new MyThread3();
    p2.start();
    p3.start();
    }
}
class MyThread2 extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if(i%2==0)
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}
class MyThread3 extends Thread{
    public void run(){
        for(int i=0;i<100;i++){
            if(i%2!=0)
                System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}
因对象只使用一次,所以可以创建匿名子对象
    new Thread(){
        public void run(){
            for(int i=0;i<100;i++){
                if(i%2!=0)
                    System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }.start();

Thread类的有关方法
在这里插入图片描述
调用set()和get()方法设置线程名字:
在这里插入图片描述或者在构造其中设置线程名字:
在这里插入图片描述释放当前cpu执行权
在这里插入图片描述
加入执行
在这里插入图片描述睡眠
在这里插入图片描述判断是否存活
在这里插入图片描述

  • 线程的优先级

在这里插入图片描述在这里插入图片描述
2:实现Runnable接口的类
在这里插入图片描述

public class WindowTest2 {
    public static void main(String[] args) {
        Window w=new Window ();
        Thread t1=new Thread(w);//用的是public Thread(Runnable target){}构造器
        Thread t2=new Thread(w);//t1和t2构造器中的w参数相同,则两者共享一个ticket
        t1.setName("窗口1");
        t2.setName("窗口2");
        t1.start();
        t2.start();

    }
}
class Window implements Runnable{
    private  int ticket=100;//不用定义为static型
    public void run(){
      while(true){
        if(ticket>0){
            System.out.println(Thread.currentThread().getName()+":卖票,票号为:"+ticket);
            ticket--;
        }else{
            break;
        }
    }}
}

在这里插入图片描述
在这里插入图片描述
主线程也就是用户线程;异常线程,垃圾回收线程属于守护线程
在这里插入图片描述
线程的生命周期
在这里插入图片描述在这里插入图片描述线程安全问题
在这里插入图片描述

  • 同步代码块
    在这里插入图片描述同步代码块对继承:
    在这里插入图片描述
    同步代码块对实现:
    在这里插入图片描述
    同步监视器有三种:
    1.对象:
    在这里插入图片描述2.this:是调用windows.run()的对象,只有一个
    在这里插入图片描述
    3.当前类:
    在这里插入图片描述
    同步方法:

    同步方法对继承
    在这里插入图片描述同步方法对实现
    在这里插入图片描述Lock锁

    Lock锁对实现:
    在这里插入图片描述
    在这里插入图片描述
  • 死锁
    在这里插入图片描述在这里插入图片描述
  • 线程通信
    两个线程交替进行
    在这里插入图片描述
    在这里插入图片描述sleep()和wait()相同点和区别
    在这里插入图片描述
    3.实现Callable接口
    在这里插入图片描述
package Test03;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableTest {
    public static void main(String[] args) {
        //3.创建Callable接口实现类的对象
        NumThread p=new NumThread();
        //4.将次Callable接口实现类作为形参传递到FutherTask构造器中,创建FutherTask的对象中
        FutureTask f=new FutureTask(p);
        //5.将FutherTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并且调用start();
        new Thread(f).start();
        try {
            //6.获取Callable中call方法的返回值
            Object sum = f.get();
            System.out.println("总和为:"+sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
//1.创建一个实现Callable的实现类
class NumThread implements Callable {
    int sum=0;
    //实现call方法,将此线程需要执行的操作声明在call()中
    @Override
    public Object call() throws Exception {
        for(int i=1;i<100;i++){
            if(i%2==0){
                System.out.println(i);
                sum+=i;
            }}
            return sum;//装箱将sum装换为类
        }
    }
    ```
 4.使用线程池
 ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190602160002928.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2NjcxMg==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190602155801401.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2NjcxMg==,size_16,color_FFFFFF![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190602155813109.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2NjcxMg==,size_16,color_FFFFFF,t_70)








标签:main,Thread,IDEA,Callable,线程,使用,new,多线程,public
来源: https://blog.csdn.net/weixin_44966712/article/details/90678538

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有