title: How to borrow value in a thread rather than move
body: <p>I have two threads that both need immutable access to a Vec and at the moment I'm having to make clone of that vector so both threads can use the data, I want to try and get rid of this extra copy</p>
  
  <pre class="lang-rust prettyprint-override"><code>use clap::{App, Arg};
  use std::fs;
  use std::thread;
  
  mod part1;
  mod part2;
  
  fn main() {
      let matches = App::new("day1")
          .about("AoC2018 day1")
          .arg(
              Arg::with_name("INPUT")
                  .help("The file to read input from")
                  .required(true)
                  .index(1),
          )
          .get_matches();
  
      let filename = matches.value_of("INPUT").unwrap();
      let file_content = fs::read_to_string(filename).expect("Could not read/open file");
  
      let numbers: Vec&lt;i64&gt; = file_content
          .lines()
          .map(|x| x.parse::&lt;i64&gt;().expect("Could not extract value"))
          .collect();
      let numbers2 = numbers.clone();
  
      let handle1 = thread::spawn(move || part1::part1(&amp;numbers));
  
      let handle2 = thread::spawn(move || part2::part2(&amp;numbers2));
  
      let result1 = handle1.join();
      let result2 = handle2.join();
  
      println!("Part 1: {}", result1.unwrap());
      println!("Part 2: {}", result2.unwrap());
  }
  
  </code></pre>