IDEA的使用与多线程

十一:IDEA的使用与多线程

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

  • 11.1
    IDEA的使用与多线程
    IDEA的使用与多线程
    IDEA的使用与多线程
    bin/idea64.exe.vmoptions下修改
    IDEA的使用与多线程
    IEDA工程:
    输出是:sout+enter键或者(“HelloWorld ”).sout+enter键;main()方法是psvm;(可在“File“”setting”“live Tenplates”中更改)
    IDEA的使用与多线程
    Eclipse工程:
    输出是:syso+alt+/;main()方法是main()+alt+/;
    IDEA的使用与多线程

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

  • 11.3多线程
    IDEA的使用与多线程
    IDEA的使用与多线程
    IDEA的使用与多线程
    IDEA的使用与多线程

  • 如何创建多线程:
    1:继承于Thread类
    IDEA的使用与多线程

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类的有关方法
IDEA的使用与多线程
调用set()和get()方法设置线程名字:
IDEA的使用与多线程或者在构造其中设置线程名字:
IDEA的使用与多线程释放当前cpu执行权
IDEA的使用与多线程
加入执行
IDEA的使用与多线程睡眠
IDEA的使用与多线程判断是否存活
IDEA的使用与多线程

  • 线程的优先级

IDEA的使用与多线程IDEA的使用与多线程
2:实现Runnable接口的类
IDEA的使用与多线程

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;
        }
    }}
}

IDEA的使用与多线程
IDEA的使用与多线程
主线程也就是用户线程;异常线程,垃圾回收线程属于守护线程
IDEA的使用与多线程
线程的生命周期
IDEA的使用与多线程IDEA的使用与多线程线程安全问题
IDEA的使用与多线程

  • 同步代码块
    IDEA的使用与多线程同步代码块对继承:
    IDEA的使用与多线程
    同步代码块对实现:
    IDEA的使用与多线程
    同步监视器有三种:
    1.对象:
    IDEA的使用与多线程2.this:是调用windows.run()的对象,只有一个
    IDEA的使用与多线程
    3.当前类:
    IDEA的使用与多线程
    同步方法:
    IDEA的使用与多线程
    同步方法对继承
    IDEA的使用与多线程同步方法对实现
    IDEA的使用与多线程Lock锁
    IDEA的使用与多线程
    Lock锁对实现:
    IDEA的使用与多线程
    IDEA的使用与多线程
  • 死锁
    IDEA的使用与多线程IDEA的使用与多线程
  • 线程通信
    两个线程交替进行
    IDEA的使用与多线程
    IDEA的使用与多线程sleep()和wait()相同点和区别
    IDEA的使用与多线程
    3.实现Callable接口
    IDEA的使用与多线程
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)








上一篇:java多线程之创建线程的4种方式及Future


下一篇:多线程二 基本技能