博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础学习 —— 线程
阅读量:4940 次
发布时间:2019-06-11

本文共 1833 字,大约阅读时间需要 6 分钟。

线程:

多线程的好处:解决了在一个进程中同时执行多个任务代码的问题。

自定义线程的创建方式:

1.自定一个类继承thread类,重写thread的run方法 吧自定义线程的任务代码写在run方法内,创建thread子类的对象并且调用start()方法启动线程。

2.自定义一个类实现runnable接口,实现runnable接口中run方法,吧自定义线程的任务代码写在run方法内部,创建runnable实现类的对象 ,创建thread对象并且把runnable实现类的对象作为参数传递,调用thread对象的start方法开启线程。

线程安全问题出现的根本原因:
必须存在着两个或者两个以上的线程共享一个资源。
操作共享资源的代码必须有两句或者有两句以上
线程安全问题的解决方案:
同步代码块解决
synchronized(锁){
需要被同步的代码
}
同步行数解决:
修饰符 synchronized 函数名(形参列表。。。){
}

1 public class demo1 extends Thread{ 2      3     public demo1(String name) { 4         super(name); 5     } 6     public void run() { 7         for (int i = 0; i < 50; i++) { 8             System.out.println(Thread.currentThread().getName()+":"+i); 9         }10     }11     public static void main(String[] args) {12         demo1 demo1 = new demo1("sony");13         demo1.start();14         for (int i = 0; i < 50; i++) {15             System.out.println(Thread.currentThread().getName()+":"+i);16         }17     }18 }
sony:0main:0sony:1main:1sony:2main:2sony:3sony:4main:3sony:5main:4sony:6main:5sony:7main:6sony:8sony:9sony:10sony:11sony:12sony:13sony:14sony:15sony:16sony:17sony:18sony:19sony:20sony:21sony:22sony:23sony:24main:7sony:25main:8sony:26main:9sony:27main:10sony:28main:11sony:29main:12sony:30main:13main:14sony:31main:15sony:32main:16sony:33main:17main:18sony:34main:19main:20sony:35main:21sony:36sony:37sony:38main:22sony:39main:23sony:40main:24main:25main:26sony:41main:27sony:42main:28sony:43main:29sony:44main:30sony:45main:31sony:46main:32sony:47main:33sony:48main:34sony:49main:35main:36main:37main:38main:39main:40main:41main:42main:43main:44main:45main:46main:47main:48main:49
View Code

 

注意事项:

同步代码块的锁 可以是任意的对象。但是同步锁对象必须是多线程共享的对象,否则锁不住。
同步函数的锁 是固定的 非静态函数的锁对象是 this对象,静态函数的锁对象时 class对象。
在同步代码块或同步函数中调用sleep方法是不会释放锁对象的。如果调用的wait方法是会释放锁对象的。

转载于:https://www.cnblogs.com/wy0904/p/7479073.html

你可能感兴趣的文章
hdoj3714【三分】
查看>>
嵌入式开发入门(4)—驱动入门之时序图分析【20121211修改,未完】
查看>>
Python 使用字符串
查看>>
Quartz Core之CALayer
查看>>
java:一个项目的开发过程(转)
查看>>
express框架学习笔记
查看>>
记录一个css的综合运用
查看>>
操作系统下载路径
查看>>
网站开发 关于图片压缩 以及图片使用
查看>>
hive的count(distinct id)测试--慎用
查看>>
第九周周总结
查看>>
Logistic Regression
查看>>
8lession-基础类型转化
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>
数据交互 axios 的使用
查看>>