java线程面试手写题
1.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
public class Question1 { private int j = 0;
/**
* @param args
*/
public static void main(String[] args) {
Question1 q = new Question1();
Dec dec = q.new Dec();
Inc inc = q.new Inc();
for(int i=0; i<2;i++){
Thread t2 = new Thread(inc);
t2.start();
Thread t1 = new Thread(dec);
t1.start(); }
} private synchronized void inc(){
j++;
System.out.println( Thread.currentThread().getName()+"-inc:"+j);
} private synchronized void dec(){
j--;
System.out.println( Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable { @Override
public void run() {
inc(); }
} class Dec implements Runnable { @Override
public void run() {
dec(); } }
}
2.设计4个线程, 其中3个线程将一个长度为3的数组每项增加1,第4个线程输出数组3个数的和写出程序。
public class Question2 {
int[] a = new int[3];
/**
* @param args
*/
public static void main(String[] args) {
Question2 q = new Question2();
Inc inc = q.new Inc();
Print p = q.new Print();
for(int i=0; i<3; i++){
Thread t1 = new Thread(inc);
t1.start();
}
Thread t2 = new Thread(p);
t2.start();
} private synchronized void inc(){
for(int i=0;i<a.length;i++){
a[i] += 1;
} System.out.println(Thread.currentThread().getName()+"-inc:"+Arrays.toString(a));
} private synchronized void print(){
int sum = 0;
for(int i=0;i<a.length;i++){
sum += a[i];
}
System.out.println(Thread.currentThread().getName()+"-print:"+Arrays.toString(a)+"和为:"+sum);
} class Inc implements Runnable { @Override
public void run() {
inc(); } } class Print implements Runnable { @Override
public void run() {
print(); } }
}
java线程面试手写题的更多相关文章
- 三 基于Java动态数组手写队列
手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...
- [不得不知道系列]Java线程面试你不得不知道的基础知识一
Java内存管理面试指南一 Java基础面试指南一 Java基础面试指南二 Java基础面试指南三 Java基础面试指南四 Java线程面试指南一 Java线程面试指南二 Redis面试指南一 Kaf ...
- 前端面试手写代码——call、apply、bind
1 call.apply.bind 用法及对比 1.1 Function.prototype 三者都是Function原型上的方法,所有函数都能调用它们 Function.prototype.call ...
- 前端面试手写代码——模拟实现new运算符
目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...
- 前端面试手写代码——JS函数柯里化
目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...
- java线程面试
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成 ...
- java开发面试大全刷题整理
题目源自Java团长公众号,内容个人整理,来源于各大博客,未经允许,不准摘抄,仅供分享,不做商业使用. 本分享多数为浅层知识体系,更为底层的还请自行多写写代码,若有不对之处,望广大的人才指点,不喜勿喷 ...
- JAVA面试题 手写ArrayList的实现,在笔试中过关斩将?
面试官Q1:可以手写一个ArrayList的简单实现吗? 我们都知道ArrayList是基于数组实现,如果让你实现JDK源码ArrayList中add().remove().get()方法,你知道如何 ...
- 二 基于java动态数组手写栈
package dataStucture2.stack; import dataStucture2.array.MyDynamicArray; /** * 基于动态数组手写栈 * 设计时,栈中仅栈顶对 ...
随机推荐
- (转)搞个这样的APP要多久?心酸啊。
这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要 ...
- SQL高效分页(百万条数据)
第一种方法:效率最高 SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ...
- Jquery动画操作的stop()函数
今天做一个点击动画时,遇到了当快速连续点击时,动画效果会乱,并不是我们想要达到的效果. 查询了一下,确认是动画累积的原因.网上搜了一下,发现jquery 的stop()函数刚好能解决. stop(cl ...
- TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit基本操作修改提交项目 项目克隆完成后(可以将克隆 clone 理解为 下载,检出 c ...
- python-无名管道进程通信
#!/usr/bin/python #coding=utf-8 import sys,os from time import sleep (r,w)=os.pipe() #创建无名管道,返回两个整数, ...
- Kibana插件sentinl实现邮件报警
为什么会突然想用到对日志的异常内容进行邮件报警,是因为在上周公司的线上业务多次出现锁表,开发在优化sql的同时,我也在想是不是可以对日志的异常内容进行检测并实现邮件预警. 在网上查询了一些资料后,决定 ...
- MapReduce原理——分而治之
一.MapReduce简介 二.MapReduce并行处理的基本过程 三.MapReduce实际处理流程 四.一个job的运行流程 一.MapReduce简介 MapReduce是一种并行可扩展计算模 ...
- URL重写html后Html文件打不开解决办法
1.首先照旧在网站配置的应用程序扩展名映射中添加扩展名.html映射到aspnet_isapi.dll,是否存在不选: 2.在web.config文件中<compilation>节点下添加 ...
- nodejs学习笔记一( sublime、atom开发环境,http模块,fs模块的初识)
http服务 let server = http.createServer(function(req,res){ }); 监听: server.listen(8080); re ...
- C#中获取各种路径获取方法
// 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名System.Diagnostics.Proces ...