多线程学习..害慢慢写吧

Posted yondddd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程学习..害慢慢写吧相关的知识,希望对你有一定的参考价值。

多线程

  • 线程就是独立的执行路径;

  • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程; .

  • main()称之为主线程,为系统的入口,用于执行整个程序;

  • 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能认为的干预的。

  • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;

  • 线程会带来额外的开销,如cpu调度时间,并发控制开销。

  • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致

 

三种创建方式

技术图片

 

 

调用run()与start()

 

 

 

 技术图片

 

 

 

技术图片

 

 

 //创建线程方式一:继承Thread类,重写Run方法,调用Start开启线程
 //总结:线程开启不一定立即执行,由cpu调度执行
 public class TestThread01 extends Thread{
     @Override
     public void run() {
         //run方法线程体
         for (int i = 0; i < 20; i++) {
             System.out.println("副线程0000000");
        }
    }
 ?
     public static void main(String[] args) {
         //创建一个线程对象
         TestThread01 thread1 = new TestThread01();
         //调用start()方法开启线程
         thread1.start();
         for (int i = 0; i < 2000; i++) {
             System.out.println("主线程"+i);
        }
    }
 }

多个线程同时操作一个资源

 

 //多个线程同时操作同一个对象
 //买火车票
 ?
 //发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱
 public class TestThread04 implements Runnable {
     //票数
     private int ticketNums = 10;
 ?
     @Override
     public void run() {
         while (true){
             if (ticketNums<=0){
                 break;
            }
             try {
                 Thread.sleep(200);
            } catch (InterruptedException e) {
                 e.printStackTrace();
            }
             System.out.println(Thread.currentThread().getName()+"拿到了"+ticketNums--+"张票");
        }
    }
 ?
     public static void main(String[] args) {
         TestThread04 testThread04 = new TestThread04();
         new Thread(testThread04,"学生").start();
         new Thread(testThread04,"老师").start();
         new Thread(testThread04,"黄牛").start();
    }
 }

 

 

 

以上是关于多线程学习..害慢慢写吧的主要内容,如果未能解决你的问题,请参考以下文章

python小白学习记录 多线程爬取ts片段

FixedThreadPool vs CachedThreadPool:两害相权取其轻

多线程 Thread 线程同步 synchronized

线程和线程池

Java线程安全总结

Java网络多线程编程——对象流错误导致Connection reset